1 基础使用
1.1 HelloWorld
基于SprinBoot2由浏览器发送hello请求,后台响应
1,新建maven工程,引入必要依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2,编码
首先需创建SpringBoot的启动类,使用@SpringBootApplication注解
接着创建Controller,使用@RequestMapping接收浏览器的url
@RestController注解意为使用@Controller+@RequestBody
3,启动SB的main程序,访问浏览器
注意第一次启动时,访问浏览器可能遇到404的情况
如代码无问题,可以检查包结构,注意SpringBoot的启动类的位置
可以参考该文章:springboot访问请求404解决方法
使用SpringBoot能极大简化开发流程,省略了很多配置,提高效率
甚至忽略tomcat,直接启动main方法即可,SpringBoot内嵌了tomcat
SpringBoot可以忽略很多配置,各种特性可以由一个文件来配置
在resource文件夹下创建application.properties来完成
通过properties文件来配置web,端口,数据库访问…
1.2 依赖管理&自动配置
1.2.1 依赖管理
在helloworld示例中,pom内只增加了两部分就能启动应用
parent用于依赖管理,声明了常用jar的版本,如jackson,logback,mysql驱动等
如需要更换版本号,在pom中增加properties属性即可:
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
starter场景启动器,这个场景的常规需要的依赖都会自动引入
1.2.2 自动配置
SpringBoot可以自动配置所需的框架及容器
如SpringMVC通过web场景启动器引入后,会自动配置好常用组件
无需创建xml来配置servlet等,可以通过SpringBootApplication返回的IOC容器
查看已配置好的相关组件,如DispatcherServlet,包括字符编码组件等…
且无需包扫描配置,主程序所在的包及子包下都能被自动扫描
各种配置均有默认值(如tomcat端口8080),可以按需加载配置
2 关于注册Bean的注解
2.1 @Configuration与@Bean
在SSM项目中,如需注册使用实例,需要编写bean.xml完成注册
但在SpringBoot中,可以直接编码完成,通过极少的注解来注册实例
1,首先需要创建实例类
2,创建配置类,通过@Configuration声明这是一个配置类
并在返回实例的方法上增加@Bean注解以注册到容器中,默认单例
3,从容器中获取并使用实例
注意在上述第二个过程中,使用的注解@Configuration有默认值proxyBeanMethods
默认为true,即可以被代理,当我们使用注解默认值并直接从MyConfig中获取对象时:
可以看到调用MyConfig同一个方法,经过两次return new但返回了相同的对象
其原因在于通过@Configuration注解修饰后的MyConfig类已被增强,是一个代理对象
SpringBoot总会检查user01是否存在,有则取,无则创建,保持单例
但如果将proxyBeanMethods设置为false,每次从容器中获取实例时就不会检查,以提高效率此时从容器中取出的对象仍然是单例的,但从MyConfig中获取的对象就不是同一个
proxyBeanMethods的值true或false对应两种模式Full和Lite
配置类中实例无依赖关系,可以使用Lite模式加速容器启动过程,减少判断
配置类中实例存在依赖关系,使用Full模式
2.2 @Import、@Conditional、@ImportResource、@ConfigurationProperties
2.2.1 @Import
也可以通过@Import注解,向容器中导入自己的Bean实例或第三方实例
给容器中自动创建Import类型的无参对象
在容器中可以找到Import的无参实例Pet
2.2.2 @Conditional
@Conditional注解用于条件装配,即满足@Conditional的条件,则进行注入
@Conditional有多个实现,如@ConditionalOnBean(name = "xxx’)意味当容器中存在名为
xxx的实例时,才注册该实例
示例中如果想要注册user01,那么user01需要的petA必须存在于容器中,否则不能注册
2.2.3 @ImportResource
虽然SpringBoot提供的Bean注解能够替代原先的xml配置
但某些场景为了兼容还是需要原先xml中配置好的Bean,由于迁移这些Bean过于麻烦
SpringBoot提供的@ImportResource注解可以直接使用原先的xml配置文件
如现有的beans.xml配置好了Bean
可以通过@ImportResource来解析该xml并注册实例
可以成功在容器中获取xml中配置的Bean
2.2.4 @ConfigurationProperties
使用SSM开发时,经常需要创建properties文件规定一些配置
由java代码读取并解析,如数据库连接需要password、port等
这个过程如果使用原生Java来处理需要涉及流处理
但在SpringBoot中只需使用@ConfigurationProperties即可快速完成
如新建实例Car,使用@component注解将其作为组件加入容器
并使用@ConfigurationProperties注解指明key前缀
将配置以KV的形式写在application.properties中
访问url,正确得到配置好的bean
SpringBoot的配置小结:
1,SpringBoot启动前会先加载所有的自动配置类
2,每个自动配置类按照条件选择性生效,默认绑定配置文件(如ServerProperties)指定的值
3,生效的配置类会给容器中增加许多实例
4,只要容器中有这些注册好的实例,相当于这些功能可以直接使用
5,只要有用户自己配置的,以用户配置的优先,用户直接@Bean替换默认实例或修改配置文件(application.properties)
配置流程:
1,引入场景依赖
2,查看自动配置了哪些
3,结合业务是否需要修改
3 实用工具
3.1 Lombok
简化业务对象开发,省略构造器,get/set方法…
根据注解要求会在编译时生成构造方法等
需要引入依赖,并在IDEA中下载Lombok插件
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
SpringBoot已经声明了版本
还可以使用Lombok中的@Slf4j作为日志功能
3.2 Developer-Tools
开发中经常需要修改代码或配置,但每次修改完后都需要重新启动
为此可以使用Developer-Tools,引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
每次修改后 使用快捷键ctrl+f9实现更新
但本质还是重新启动,真正实现热部署需要使用Jrebel等收费功能
Developer-Tools还有其他功能…
3.3 Spring Initializr
通过Spring Initializr更快的构建SpringBoot工程
IDEA中选择Spring Initializr
确定包名及JDK版本号
选择使用的场景及SpringBoot版本
会自动创建好项目结构并下载场景所需依赖
4 yaml配置文件
4.1 yaml使用
yaml上一种标记语言,用法类似properties,非常适合用于以数据为中心的配置文件
yaml基本语法:
1,以KV形式表达 key: value kv之间有空格
2,大小写敏感,使用缩进表示层级关系,缩进的空格数无所谓,只需相同元素左对齐即可
3,# 表示注释,字符串无需加引号,但''与""都表示字符串内容,但前者会被转义,后者不会被转义
yaml的数据类型:
1,字面量 data、boolean、string、number、null
k: v
2,对象 map、hash、set、bject
k: {k1: v1, k2: v2, k3: v3}
或
k:
k1: v1
k2: v2
k3: v3
3,数组 array、list、queue
k: [v1, v2, v3]
或
k:
- v1
- v2
- v3
使用yaml表示一个Person类实例:
public class Person {
private String name;
private Integer age;
private Date birth;
private List<Pet> pets;
private Map<String, Object> score;
}
public class Pet {
private String name;
private Integer age;
}
对应yaml配置
person:
name: zhangsan
sex: true
age: 18
birth: 2000/12/19
pets:
name: caka
age: 7
score:
english: 80
math: 90
4.2 yaml文件自动提示
第一次使用yaml时,会发现没有提示,不像application.properties文件一样便捷
为此可以引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
重新启动后,yaml编写即可出现提示