SpringBoot学习(四)配置文件值注入 @ConfigurationProperties和@Value两种方式区别
程序员文章站
2024-01-09 23:52:16
...
一.通过@ConfigurationProperties为属性注入值:
1.在application.yml文件中配置:
person:
lastName: zhangfan
age: 18
boss: true
birth: 2019/07/28
maps: {k1: v1,k2: v2}
list:
- lisi
- zf
dog:
name: gou
age: 2
2.在person类中:
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date date;
private Map<String,Object> maps;
private List<Object> list;
private Dog dog;
}
3.结果:
person里面的值都成功赋值到变量中
二.通过@Value为属性注入值:
1.在application.yml文件中配置:
person:
lastName: zhangfan
age: 18
boss: true
birth: 2019/07/28
maps: {k1: v1,k2: v2}
list:
- lisi
- zf
dog:
name: gou
age: 2
2.在person类中:
Component
//@ConfigurationProperties(prefix = "person")
public class Person {
@Value("${person.lastName}")
private String lastName;
@Value("#{10*3}")
private Integer age;
private Boolean boss;
private Date date;
}
3.结果:
通过设置将lastName的值为zhangfan,age的值变为30
三[email protected]和@Value获取值的区别:
1.功能:
(1)@ConfigurationProperties:支持批量注入配置文件中的属性
(2)@Value:只能一个个指定文件中的属性
2.松散绑定(松散语法):
(1)@ConfigurationProperties:支持
(2)@Value:不支持
3.SpEL(运算,比如#{10*3}):
(1)@ConfigurationProperties:不支持
(2)@Value:支持
4.JSR303数据校验:
当增加@Validated校验时,比如在定义变量的前面加个@email,则数据类型必须是email格式:
@email
private String lastName;
(1)@ConfigurationProperties:支持
(2)@Value:不支持
5.复杂类型封装(Map、List等类型):
(1)@ConfigurationProperties:支持
(2)@Value:不支持
6.小结:
(1)如果只是需要在某个业务逻辑中获取一下配置文件中的某项值,使用@Value;
(2)如果说,我们专门写了一个javaBean来和配置文件进行映射,则使用@ConfigurationProperties