SpringBoot系列之@Value和@ConfigurationProperties
- SpEL表达式
ok,再对比一下这两种注解对SpEL表达式的支持,对于SpEL表达式的可以参考:https://blog.csdn.net/fanxiaobin577328725/article/details/68942967
本博客之对比一下,这两种注解
ok,先改下配置,看看@ConfigurationProperties能获取到?
user: isOnline: #{1*1}
debug了一下,发现不能正常计算
ok,验证@value
@Value("#{1*1}") private Long isOnline;
junit测试,ok,@Value是支持的
User{userName='null', isAdmin=false, regTime=null, isOnline=1, maps=null, lists=null, address=null}
- JSR303数据校验
同样对于JSR303本博客也不进行详细介绍,详情可以参考博客:https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/index.html
@ConfigurationProperties验证:
@AssertTrue private boolean isAdmin;
junit测试,发现可以支持
@Value验证
@AssertTrue @Value("${isAdmin}") private boolean isAdmin;
验证,校验发现不起效
- 复杂类型封装
ok,验证@Value是否支持对象类型和list类型,在上篇博客,很显然验证了@ConfigurationProperties是支持对象类型和list类型获取的
所以,本博客验证一下@Value是否支持就可以
@Value("${maps}") private Map<String,Object> maps;
junit测试,发现类型转换错误
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Map';
综上,可以归纳一下@Value和@ConfigurationProperties两种属性的区别
| | @ConfigurationProperties| @Value|
|--|--|--|
| 功能对比| 批量注入配置文件属性| 一个一个属性的注入|
| 松散绑定| 支持 | 不支持|
| SpEL| 不支持 |支持 |
| JSR303数据校验| 支持| 不支持|
| 复杂类型封装| 支持 |不支持 |
所以,@ConfigurationProperties适用与注入配置文件整个对应bean的全部属性,而@Value正如其名称一样,适合注入配置文件单个值https://www.cnblogs.com/mzq123/p/11789730.html