@Value 與 @ConfigurationProperties
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的屬性 | 一個一個指定屬性 |
鬆散綁定(鬆散語法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303 數據校驗 | 支持 | 不支持 |
複雜類型封裝 | 支持 | 不支持 |
功能
@ConfigurationProperties 一句話搞定,直接批量注入
@ConfigurationProperties(prefix = "person")
@Value 需要一個一個進行指定
/**
* <bean class="Person">
* <property name="LastMame" value=""></property>
* </bean>
*
* value中可以輸入:字面量/${key}從環境變量、配置文件中獲取值/#{SpEL}
*/
@Value("${person.last-name}")
private String lastName;
@Value("#{5*2}")
private Integer age;
@Value("true")
private Boolean boss;
鬆散語法:
lastName: zhangsan
last_name: zhangsan
last-name: zhangsan
以上三種都可以進行綁定
SpEL:
@Value("#{5*2}")
private Integer age;
支持表達式,可以進行計算
JSR303 數據校驗
@ConfigurationProperties(prefix = "person")
@Validated
在 @ConfigurationProperties 後面加上 @Validated 註釋,證明下面數據需要校驗
例在字段上加上 @Email 註釋,即說明 lastName 字段必須爲郵件格式,否則不能運行成功
// lastName 必須是郵箱格式
@Email
private String lastName;
複雜類型封裝
如果有 Map 或者 List 字段等複雜類型封裝,@Value 是獲取不到值的,故:
如果說,我們只要再某個業務邏輯中需要獲取一下配置文件中的某個值,使用 @Value
如果說,我們專門編寫一個 javaBean 來和配置文件進行映射,使用 @ConfigurationProperties
配置文件不管是 yml 還是 properties 都能獲取到值