@ConfigurationProperties与@Value区别
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@ConfigurationProperties与@Value区别相关的知识,希望对你有一定的参考价值。
文章目录
@ConfigurationProperties与@Value区别
使用位置
@ConfigurationProperties
:标注在JavaBean的类名上;@Value
:标注在JavaBean的属性上。
@ConfigurationProperties
位置如下:
@Value
位置如下:
二者功能不同
@ConfigurationProperties
是可以批量注入的,一次搞定,而@Value
只能一个一个注入,
如下:
//@Value:注意一个容器已经存在的对象 @Value("$student.student-name")
@Value("$student.student-name")
private String studentName;
@Value("$student.age")
private Integer age;
@Value("true")
private Boolean sex;//男代表true
但是我们使用@ConfigurationProperties
就配置一行就完事了:
// 读取主配置文件中的数据,赋值给student对象
// prefix: 需要属性,指定主配置文件中的数据
@ConfigurationProperties(prefix = "student")
public class Student
private String studentName;
private Integer age;
private Boolean sex;//男代表true
松散绑定
PS:什么是松散绑定????
松散绑定是springboot在使用 @EnableConfigurationProperties 注解里面提出来的,也就是说在application.yml文件中,可以不那么严格的去命名变量名。
松散语法属性名匹配规则是这样的:
- studentName:使用标准驼峰方式
- student-name:一般小写用
-
- STUDENT_NAME:一般大写用
_
比如说ipaddress可以在配置文件中有多种出线形势,但是在代码里面还是要以驼峰命名。
ipAddress: 192.168.0.1 // 驼峰命名
ipaddress: 192.168.0.1 //
ip_Address: 192.168.0.1 // 下划线命名
ip-address: 192.168.0.1 // -线命名
在代码中:
@Component
@ConfigurationProperties(prefix = "servers")
public class ServerConfig
private String ipAddress;
PS结束了
@ConfigurationProperties支持松散绑定studentName可以写为student-name都没有问题。而@Value不可以。@Value进行绑定时,名称只能与application.properties中属性的名称相同
SpEL
@ConfigurationProperties不支持SpEL,比如:
properties中配置
#配置student
student.student-name=jack
student.age=#18+5 //这里是直接报错
student.sex=true
Yml文件配置不支持SpEL
student:
student-name: rose@qq.com
age: #18+8 #不会报错,但是不能注入到student的age中
sex: false
@Value支持SpEL。比如:
@Value("#18+8")
private Integer age;
Age是可以正常注入的。
复杂类型封装
@ConfigurationProperties支持复杂类型封装
@Value不支持复杂类型,只支持字符串,和基本数据类型及其包装类。
总结
区别 | @ConfigurationProperties | @Value |
---|---|---|
位置 | 类名上 | 属性上 |
功能 | 批量注入属性文件中的属性 | 一个个的指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复制类型封装 | 支持 | 不支持 |
以上是关于@ConfigurationProperties与@Value区别的主要内容,如果未能解决你的问题,请参考以下文章
如何将@ConfigurationProperties 与记录一起使用?
SpringBoot 配置 @ConfigurationProperties 与 @Value 区别
5.@ConfigurationProperties与@Value的区别
如何仅使用@DateTimeFormat 将日期@ConfigurationProperties 与时间绑定?