- @Value 与 @ConfigurationProperties 都可以从全局配置文件中获取值然后注入到属性中
对比项 | @ConfigurationProperties | @Value |
注解功能 | 将配置文件中的属性值批量注入类的各个属性 | 为类中的各个属性逐个赋值 |
松散绑定 | 支持 | 不支持 |
SpEL(Spring 表达式) | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
所谓松散语法也就是属性命名规则(Relaxed binding)
- person.firstName:使用标准方式
- person.first-name:大写用-
- person.first_name:大写用_
- PERSON_FIRST_NAME: 系统属性推荐使用这种写法
@ConfigurationProperties支持松散语法 @Value不支持松散语法
application.properties文件中有字段 persion.first-name
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String firstName;
}
JSR303数据校验(@Validation)
@ConfigurationProperties @Validated 支持 @Value不支持
@ConfigurationProperties
@Validated
public class Properties {
@NotNull
private String userName;
@Email
private String email;
}
SpEl
@ConfigurationProperties不支持EL表达式
application.properties文件中有字段 person.userAge=12
userAge = 12 //可以
userAge = #{2*6} //EL表达式不支持
@Value支持EL表达式
@Value(userAge=#{2*6}) //支持EL表达式
两者都可以从配置文件 .yml 与 .properties 中获取到值;
如果项目中只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value即可;
如果项目中专门编写了一个JavaBean来和配置文件进行映射,则直接使用@ConfigurationProperties即可;