@ConfigurationProperties松散绑定,和复杂数据类型绑定。顺便比较和@Value的区别
原文链接https://www.toutiao.com/article/7190589733473370664/?&source=m_redirect
比较项 |
@Value |
@ConfigurationProperties |
使用方式 |
需要一个个指定 |
能够批量地注入配置文件中的属性 |
所属框架 |
Spring |
Spring Boot |
SPEL |
支持 |
不支持 |
JSR303数据校验 |
不支持 |
支持 |
松散绑定 |
不支持 |
支持 |
复杂类型绑定 |
不支持 |
支持 |
使用方式:
- @Value需要在Bean的成员属性或者set方法上,逐个设置,和配置文件进行映射。@Value("${user.username}")
- @ConfigurationProperties可以在类上直接配置,属性会自动映射绑定。
@ConfigurationProperties(prefix = "bsfit.user") @Component public class User { private String userName; private Integer age; }
小结: 如果一个bean下的配置比较多的话,使用@ConfigurationProperties比较方便。
所属框架:
- @Value是spring框架的注解,在spring-beans这个工程中。
- @ConfigurationProperties注解是Spring Boot实现的一个注解,用于配置文件对对象属性的配置。
SPEL:
- @Value是支持SPEL表达式的,如下:
1 2 | @Value ( "#{ T(java.lang.Math).random() * 100.0 }" ) private double randomNumber; |
- @ConfigurationProperties不支持SPEL表达式,验证方式如下:
1 2 3 | bsfit.user: user-name: ${person.last-name} age: #{ 5 * 2 } |
1 2 3 4 5 6 7 8 | @ConfigurationProperties (prefix = "bsfit.user" ) @Component public class User { private String userName; private Integer age; } |
输出结果如下,@ConfigurationProperties无法执行SPEL表达式。、
小结: @Value在取值方面更加强大,支持SPEL, 同时还能注入URL、文件等资源
数据校验
- @Value不支持数据校验
- @ConfigurationProperties支持数据校验,验证如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~