在将属性和配置文件进行绑定时,我们使用的是@ConfigurationProperties,实际上还可以使用@Value,这里我们注释掉@ConfigurationProperties,而使用@Value绑定部分属性
@Component
//@ConfigurationProperties(prefix = "person")
public class Person {
@Value("${person.last-name}")
private String lastName;
@Value("${person.age}")
private Integer age;
private Boolean boss;
private Date birth;
当然,没有通过@Value绑定的属性值将为null,如上述中的boss和birth属性
一、两者区别
下面分析两者的区别:
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的属性,只需要指定prefix即可 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
松散绑定是指:在配置文件中假如我们设置person的属性值为person.last-name,那么@ConfigurationProperties会认为他是person.lastName,而@Value认为属性值本身是什么就是什么,不会把person.last-name解析成person.lastName
二、具体用哪个
如果我们只是需要在某个业务逻辑中获取一下配置文件中的某项值(注意:这里说的是少量值获取),则使用@Value
如果我们专门编写了一个javaBean来与配置文件映射,则使用@ConfigurationProperties