一:两者区别
@ConfigurationProperties | @Value | |
功能上 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持(lastName和last-name都可以) | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
配置文件不管是yml还是properties他们都能获取到值
如果说,我们只是在某个业务逻辑中获取配置文件的某个值,使用@Value
如果说,我们专门编写一个JavaBean来配置文件进行映射,就使用@ConfigurationProperties
二:配置文件注入值数据校验
/**
* 只有在容器中的组件,才会拥有SpringBoot提供的强大功能
*/
@ConfigurationProperties(prefix = "person")
@Component
@Validated
public class Person {
@Email
//@Value("${person.lastName}")
private String lastName;
// @Value("#{22*3}")
private Integer age;
// @Value("true")
private String boss;
三:如果是第三方的类,不能使用@Component+@ConfigurationProperties的形式,可以使用
@EnableConfigurationProperties + @ConfigurationProperties的形式
@EnableConfigurationProperties(Person.class)
//1、开启Person配置绑定功能
//2、把这个Person这个组件自动注册到容器中
public class MyConfig {
}