如果,你看了我的上一篇文章,你会领悟到@ConfigurationProperties可以将本类中的所有属性和配置文件中相关的配置进行绑定,然而,将本类中的所有属性和配置文件中相关的配置进行绑定的方式还有另一种,那便是使用@Value的注解。
@Vlaue的用法
@Component
// @ConfigurationProperties(prefix = "person")
public class Person {
@Value("${person.lastName}")
private String lastName;
@Value("#{11*2}")
private Integer age;
@Value("true")
private Boolean boss;
注意
没有使用@ConfigurationProperties(prefix = “person”)
${person.lastName} 意味着从环境变量、配置文件中获取值
#{11* 2} 也就是#{SpEL}是Spring的EL表达式
运行一波,没毛病,这种方式也能进行赋值
那么,问题来了,@ConfigurationProperties和@Value有什么区别???
区别
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
松散绑定(松散语法)
如lastName可以写成last-name 、 last_name
JSR303数据校验
@Component
//@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@Value("${person.lastName}")
@Email
private String lastName;
@Value("#{11*2}")
private Integer age;
@Value("true")
private Boolean boss;
@Email验证输入是否是邮箱格式
复杂类型封装
譬如,
@Value("${person.maps}")
private Map<String, Object> maps;
应用场景
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
上一篇:3 | SpringBoot配置完application.yml后如何注入配置文件的值
下一篇:5 | SpringBoot中@PropertySource、@ImportResource和@Bean三个注解的作用