@Value 与 @ConfigurationProperties
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个一个指定属性 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303 数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
功能
@ConfigurationProperties 一句话搞定,直接批量注入
@ConfigurationProperties(prefix = "person")
@Value 需要一个一个进行指定
/**
* <bean class="Person">
* <property name="LastMame" value=""></property>
* </bean>
*
* value中可以输入:字面量/${key}从环境变量、配置文件中获取值/#{SpEL}
*/
@Value("${person.last-name}")
private String lastName;
@Value("#{5*2}")
private Integer age;
@Value("true")
private Boolean boss;
松散语法:
lastName: zhangsan
last_name: zhangsan
last-name: zhangsan
以上三种都可以进行绑定
SpEL:
@Value("#{5*2}")
private Integer age;
支持表达式,可以进行计算
JSR303 数据校验
@ConfigurationProperties(prefix = "person")
@Validated
在 @ConfigurationProperties 后面加上 @Validated 注释,证明下面数据需要校验
例在字段上加上 @Email 注释,即说明 lastName 字段必须为邮件格式,否则不能运行成功
// lastName 必须是邮箱格式
@Email
private String lastName;
复杂类型封装
如果有 Map 或者 List 字段等复杂类型封装,@Value 是获取不到值的,故:
如果说,我们只要再某个业务逻辑中需要获取一下配置文件中的某个值,使用 @Value
如果说,我们专门编写一个 javaBean 来和配置文件进行映射,使用 @ConfigurationProperties
配置文件不管是 yml 还是 properties 都能获取到值