#核心配置与注解
##全局配置文件
####application.properties配置文件
server.port=8081 server.servlet.context-path=/chapter02 #对实体类对象Person进行属性配置 person.id=1 person.name=tom person.hobby=play,read,sleep person.family=father,mother person.map.k1=v1 person.map.k2=v2 person.pet.type=dog person.pet.name=kity #标准写法 person.firstName=wangwu #使用横线-来对单词进行分隔 person.first-name=wangwu #使用下划线_分隔 person.first_name=wangwu #声明常量 PERSON.FIST_NAME=wangwu spring.profiles.active=test
####实体类Person中的注解
1.@Component
将当前注入属性值的Person类对象作为Bean组件放到Spring容器中,只有它这样才能被@ConfigurationProperties注解赋值
2.@ConfigurationProperties(prefix = “person”)
将配置文件中以person开头的属性值通过setter方法注入该类对应属性中
####application.yaml配置文件
application.yaml文件使用 "key: (空格) value"格式配置属性,使用缩进控制层级关系
- value值为普通数据类型时(如数字、字符、布尔等)
可以直接配置对应的属性值,对字符串类型的属性值赋值时不需要加引号
#当value值为普通数据类型
server:
port: 8082
servlet:
context-path: /hello
- value值为数组和单列集合
主要有两种书写格式:
缩进式写法
#方法1 person: hobby: - play - read - sleep
#方式2 person: hobby: play, read, sleep
行内式写法
hobby: [play,read,sleep]
- value值为Map集合和对象
缩进式写法
person:
map:
k1: v1
k2: v2
行内式写法
person:
map: {k1: v1,k2: v2}
####使用@Value注入属性
- @Value注解是用来读取配置文件中的属性值并逐个注入Bean对象的对应属性
例如给实体类person注入
@Configuration
public class Person {
@Value("$person.id")
private int id;
}
####@ConfigurationProperties注解与@Configuration注解对比
| 对比点 | @ConfigurationProperties | @Configuration |
|---|---|---|
| 底层框架 | Spring Boot | Spring |
| 功能 | 批量注入文件中的属性 | 单个注入 |
| setter方法 | 需要 | 不需要 |
| 复杂类型属性注入 | 支持 | 不支持 |
| 松散绑定 | 支持 | 不支持 |
| JSR3303数据校验 | 支持 | 不支持 |
| SpEL表达式 | 不支持 | 支持 |
#####1. 属性setter方法
在使用@ConfigurationProperties 注解进行配置文件属性值读取注入时,还必须为每一个属性设置setter方法,通过对应的注解才能够将配置文件中的属性一 一匹配并注入对应的Bean属性上。如果配置文件中没有配置属性值,则会自动将对应的Bean属性设置为空。
@Value完全不需要为属性设置setter方法,该注解会先通过表达式读取配置文件中指定的属性值,然后自动注入下方的Bean属性上。如果读取的配置文件属性为空,进行属性注入时程序会自动报错。
#####2. 复杂类型属性注入
@ConfigurationProperties和@Value都能注入配置文件中的属性,不同的是@ConfigurationProperties支持任意数据类型的属性注入,包括基本数据类型和复杂数据类型,而@Value只能注入基本类型的属性。
#####3.松散绑定
@ConfigurationProperties注解进行配置文件属性值注入时,支持松散绑定语法。例如Person类有一个字符串类型的属性firstName,那么在配置文件中进行属性配置时可以使用如下
配置方式,示例代码如下。
#标准写法 person.firstName=wangwu #使用横线-来对单词进行分隔 person.first-name=wangwu #使用下划线_分隔 person.first_name=wangwu #声明常量 使用大小写 PERSON.FIST_NAME=wangwu
#####4.JSR303数据校验
主要作用是校验配置文件中注入对应Bean属性的值是否符合相关值的规则
@Configuration
@ConfigurationProperties(prefix = "user")
@Validated //引入Spring框架支持的数据校验规则
public class User {
@Email //对属性进行规则匹配
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}



