SpringBoot框架由浅入深深度解读

37次阅读

共计 5214 个字符,预计需要花费 14 分钟才能阅读完成。

一、入门

1. 简介

Spring Boot 是一个简化 Spring 开发的框架。用来监护 spring 应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用。

我们在使用 Spring Boot 时只需要配置相应的 Spring Boot 就可以用所有的 Spring 组件,简单的说,spring boot 就是整合了很多优秀的框架,不用我们自己手动的去写一堆 xml 配置然后进行配置。从本质上来说,Spring Boot 就是 Spring, 它做了那些没有它你也会去做的 Spring Bean 配置。

2. 优点

3. 单体应用与微服务

单体应用是把所有的应用模块都写在一个应用中,导致项目越写越大,模块之间的耦合度也会越来越高。微服务是一种架构风格,用微服务可以将应用的模块单独部署,对不同的模块进行不同的管理操作,不同的模块生成小型服务,每个功能元素最后都可以成为一个可以独立替换、独立升级的功能单元,各个小型服务之间通过 http 进行通信。

4.Spring Boot 的核心特点

·微服务:

使用 Spring Boot 可以生成独立的微服务功能单元

·自动配置:

针对很多 Spring 应用程序常见的应用功能,Spring Boot 能自动提供相关配置

·起步依赖:

告诉 Spring Boot 需要什么功能,它就能引入需要的库。

·命令行界面:

这是 Spring Boot 的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。

·Actuator:

让你能够深入运行中的 Spring Boot 应用程序。

5. 简单案例:使用 maven 创建 HelloWorld 项目

第一步:首先要配置 Spring Boot 依赖

<parent><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent>Spring Boot 的版本仲裁中心;以后我们导入依赖默认是不需要写版本。(没有在 dependencies 里面管理的依赖自然需要声明版本号)<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>

spring-boot-starter-web:

spring-boot-starter:spring-boot 场景启动器。帮我们导入了 web 模块正常运行所依赖的组件。

Spring Boot 将所有的功能场景都抽取出来,做成一个个的 starters(启动器),只需要在项目里面引入这些 starter 相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器

·第二步:新建包结构如下图

·第三步:编辑相对应的类代码

·HelloController.java

@RestController// 标注是一个 Controller 类 并且支持 json 数据格式输出 public class HelloController {// 通过 http://localhost:8080/sayHello 访问该方法 @RequestMapping(“/sayHello”) public String hello(){ return “hello world”;} }

·MainTest.java

@SpringBootApplication// 代表 springboot 的启动类 用来标注主程序类 说明是一个 springboot 应用 public class MainTest {public static void main(String[] args) {// 将 springboot 应用驱动起来 SpringApplication.run(MainTest.class); } }

                                    [生辰八字起名字][1]                  

·第四步:运行 main 方法

运行 main 方法,等到自动部署服务器完成,然后通过地址就可以访问到相应的数据。

6. 案例解析 — 相应的问题

·为什么只配置一个 Spring Boot 依赖:

·入口类的 @SpringBootApplication 注解:

·AutoConfigurationPackage:

自动扫描问题 @ SpringBootApplication 标记的主类,在主类所在包或者所在的子包下面找相应的控制类,然后根据相应的注解自动配置相应的项目所需的 bean

7. 如何快速新建 Spring Boot 项目

注意创建 Spring Boot 时注意网络连接的问题,保持网络畅通。点击 New File,选择 Project 选择 Spring Initializr,加载完成后查看相应的 JDK 版本是否合适,确保后点击 next

设置项目的 GroupID 和 Artifact。选择相应的语言和要生成的 jar 包或者 war 包以及 JDK 版本

勾选创建项目所需要的依赖,比如数据库,web 等依赖,这里我们简单的介绍,不做具体的详解,就选择一个 web 依赖

选择完毕后,点击 finish 完成新建项目等待项目新建完成。

创建完毕后,保持创建的结构是这个形式即可。

创建项目完毕后,根据上面的案例简单的创建一个项目测试一下,测试通过即可。

8.Spring Boot 的配置文件

使用 Spring Boot 配置文件首先需要有 JavaBean 类,然后才能在相应的配置文件中为 javabean 中的属性赋值

想要向 JavaBean 类中赋值,需要在 javabean 的类中添加相应的注解 @Component 和 @ConfigurationProperties(prefix = “person”)。@Component 将类添加进容器,@ConfigurationProperties 配置文件中的数据注入到类中

· Dog.java

public class Dog {private String name; private String age;}

· Person.java

/**

  • 将配置文件中配置的每一个属性的值,映射到这个组件中
  • @ConfigurationProperties:告诉 SpringBoot 将本类中的所有属性和配置文件中相关的配置进行绑定;
  • prefix = “person”:配置文件中哪个下面的所有属性进行一一映射
  • 只有这个组件是容器中的组件,才能容器提供的 @ConfigurationProperties 功能;

**/

@Component@ConfigurationProperties(prefix = “person”) public class Person {private String name; private Integer age; private Boolean sex; private Date birthday; private List<String> list; private Map<String,Object> map;private Dog dog;}

·配置文件:

配置文件名是固定的 application.properties 或 application.yml

·配置文件的作用:

修改 SpringBoot 自动配置的默认值;SpringBoot 在底层都给我们自动配置好。

·application.properties 详解

示例:

设置端口号为 9999 server.port=9999

在 application.properties 中配置相应的属性之后,重新运行项目,发现服务器的端口启动号变成了 9999,证明该段代码可以修改默认的 8080 端口。

· application.properties

person.age=80 person.birthday=2019/02/5 person.list=a,b,c person.name= 旺财 person.sex=false person.map.v1=k1 person.map.v2=k2 person.dog.name=jjj person.dog.age=6

注意:在使用 application.properties 文件向配置文件可能会出现乱码,注意改变编码格式为 UTF-8

·application.yml 详解

·1.YAML 文件详解

(1) YAML 文件定义:

YAML(YAML Ain’t Market Language)语言文件,以数据为中心,比 json、XML 等文件更加适合做配置文件

(2) YAML 文件的基本语法:

  1. 使用缩进表示层级关系
  2. 缩进时不允许使用 Tab 键,只允许使用空格
  3. 缩进的空格的数目不重要,只要相同层级的元素左对齐即可
  4. 大小写敏感

(3) YAML 的值的写法:

  1. k: v:字面直接来写;
  2. 字符串默认不用加上单引号或者双引号;
  3. “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
  4. name: “zhangsan n lisi”:输出;zhangsan 换行 lisi
  5. ”:单引号;会转义特殊字符,特殊字符终只是一个普通的字符串数据
  6. name:‘zhangsan n lisi’:输出;zhangsan n lisi

(4) YAML 支持三种数据格式:对象,数组,基本数据类型

·2.YAML 的常用写法示例

· application.xml

person:name: 张三 age: 20 sex: false birthday: 2019/01/11 list: – a – b map: -k1: v1 -k2: v2 -dog: {name: ww,age: 12} dog: name: ww age: 2

相应的配置文件和类编写完毕后,编辑测试类,运行,测试通过。

9.Spring Boot 中的特殊注解

这里就讲解几个常用的注解吧,毕竟时间有限,大家可以到网上查一下,具体的注解

@SpringBootApplication 注解分析

@SpringBootApplication 是一个复合注解,包括 @ComponentScan,@SpringBootConfiguration,@EnableAutoConfiguration。

1.@SpringBootConfiguration 继承自 @Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以 @Bean 注解标记的方法的实例纳入到 srping 容器中,并且实例名就是方法名。

2.@EnableAutoConfiguration 的作用启动自动的配置。

3.@EnableAutoConfiguration 注解的意思就是 Springboot 根据你添加的 jar 包来配置你项目的默认配置,比如根据 spring-boot-starter-web,来判断你的项目是否需要添加了 webmvc 和 tomcat,就会自动的帮你配置 web 项目中所需要的默认配置。在下面博客会具体分析这个注解,快速入门的 demo 实际没有用到该注解。

4.@ComponentScan,扫描当前包及其子包下被 @Component,@Controller,@Service,@Repository 注解标记的类并纳入到 spring 容器中进行管理。是以前的 <context:component-scan>(以前使用在 xml 中使用的标签,用来扫描包配置的平行支持)。所以本 demo 中的 User 为何会被 spring 容器管理

@ResponseBody

表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用,用于构建 RESTful 的 api。在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @esponsebody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。比如异步获取 json 数据,加上 @Responsebody 后,会直接返回 json 数据。该注解一般会配合 @RequestMapping 一起使用

@Controller

用于定义控制器类,在 spring 项目中由控制器负责将用户发来的 URL 请求转发到对应的服务接口(service 层),一般这个注解在类中,通常方法需要配合注解 @RequestMapping

@RestController

用于标注控制层组件 (如 struts 中的 action),@ResponseBody 和 @Controller 的合集。

@Service

一般用于修饰 service 层的组件

@Repository

使用 @Repository 注解可以确保 DAO 或者 repositories 提供异常转译,这个注解修饰的 DAO 或者 repositories 类会被 ComponetScan 发现并配置,同时也不需要为它们提供 XML 配置项。

@Bean

用 @Bean 标注方法等价于 XML 中配置的 bean。

@Value

注入 Spring boot application.properties 配置的属性的值。

正文完
 0