SpringBoot?@Value與@ConfigurationProperties二者有哪些區(qū)別
@Value 和 @ConfigurationProperties 注解都能讀取配置文件中的屬性值并綁定到 JavaBean 中,但兩者存在以下不同。
| 區(qū)別 | @ConfigurationProperties | @Value |
| 使用位置不同 | 標(biāo)注在 JavaBean 的類名上 | 標(biāo)注在 JavaBean 的屬性上 |
| 功能不同 | 用于批量綁定配置文件中的配置 | 單值綁定 |
| 松散綁定(松散語法) | 支持 | 部分支持 |
| Spel | 不支持 | 支持 |
| 復(fù)雜類型封裝 | 支持 | 支持,比較繁瑣 |
| JSR303數(shù)據(jù)校驗(yàn) | 支持 | 不支持 |
| 應(yīng)用場景不同 | 通過JavaBean獲取整個(gè)配置文件 | 單個(gè)屬性值 |
說明
使用位置不同
- @ConfigurationProperties:標(biāo)注在 JavaBean 的類名上;
- @Value:標(biāo)注在 JavaBean 的屬性上。
@Component
@Data
@ConfigurationProperties(prefix = "person")
@PropertySource("classpath:person.properties")
public class Person {
private String firstName;
}@Component
@Data
@PropertySource("classpath:user.properties")
public class User {
@Value("${user.username}")
private String username;
}功能不同
- @ConfigurationProperties:用于批量綁定配置文件中的配置;
- @Value:只能一個(gè)一個(gè)的指定需要綁定的配置。
松散綁定支持不同
@ConfigurationProperties:支持松散綁定(松散語法),例如實(shí)體類 Person 中有一個(gè)屬性為 firstName,那么配置文件中的屬性名支持以下寫法:
- person.firstName
- person.first-name
- person.first_name
- PERSON.FIRST_NAME
@Vaule:不支持松散綁定。

SpEL 支持不同
SpEL表達(dá)式:#{obj}
- @ConfigurationProperties:不支持 SpEL 表達(dá)式;
- @Value:支持 SpEL 表達(dá)式。
@Value("#{${girl.hobbyMap}}")
private Map<String,Object> hobbyMap;復(fù)雜類型封裝
- @ConfigurationProperties:支持所有類型數(shù)據(jù)的封裝,例如 Map、List、Set、以及對(duì)象等;
- @Value:支持基本數(shù)據(jù)類型的封裝,例如字符串、布爾值、整數(shù)等類型, 對(duì)集合Map list set配置有要求
屬性校驗(yàn)
- @Value不支持屬性校驗(yàn)
- @ConfigurationProperties 支持屬性校驗(yàn)
@Configuration
@ConfigurationProperties(prefix = "boy")
@Data
@PropertySource("classpath:boy.properties")
@Validated
public class Boy {
@NotNull//不為空
private String name;
@Min(20)//不小于20
private int age;
}應(yīng)用場景不同
@Value 和 @ConfigurationProperties 兩個(gè)注解之間,并沒有明顯的優(yōu)劣之分,它們只是適合的應(yīng)用場景不同而已。
- 若只是獲取配置文件中的某項(xiàng)值,則推薦使用 @Value 注解;
- 若專門編寫了一個(gè) JavaBean 來和配置文件進(jìn)行映射,則建議使用 @ConfigurationProperties 注解。
在選用時(shí),根據(jù)實(shí)際應(yīng)用場景選擇合適的注解能達(dá)到事半功倍的效果。
到此這篇關(guān)于SpringBoot @Value與@ConfigurationProperties二者有哪些區(qū)別的文章就介紹到這了,更多相關(guān)SpringBoot @Value與@ConfigurationProperties內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java定時(shí)任務(wù)的實(shí)現(xiàn)方式
這篇文章主要介紹了java定時(shí)任務(wù)的實(shí)現(xiàn)方式,在應(yīng)用里經(jīng)常都有用到在后臺(tái)跑定時(shí)任務(wù)的需求,如何進(jìn)行java定時(shí)任務(wù),本文為大家進(jìn)行講解,感興趣的小伙伴們可以參考一下2016-02-02
Java實(shí)現(xiàn)的質(zhì)因數(shù)分解操作示例【基于遞歸算法】
這篇文章主要介紹了Java實(shí)現(xiàn)的質(zhì)因數(shù)分解操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了Java基于遞歸算法實(shí)現(xiàn)針對(duì)整數(shù)的質(zhì)因數(shù)分解相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
SpringBoot實(shí)現(xiàn)配置文件的替換
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)配置文件的替換,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
springboot開啟mybatis二級(jí)緩存的步驟詳解
這篇文章給大家介紹了springboot開啟mybatis二級(jí)緩存的詳細(xì)步驟,文中通過代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02
Java動(dòng)態(tài)規(guī)劃之硬幣找零問題實(shí)現(xiàn)代碼
這篇文章主要介紹了Java動(dòng)態(tài)規(guī)劃之硬幣找零問題實(shí)現(xiàn)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
springboot整合easy-es實(shí)現(xiàn)數(shù)據(jù)的增刪改查的示例代碼
Easy-Es是一款基于ElasticSearch官方提供的RestHighLevelClient打造的低碼開發(fā)框架,本文主要介紹了springboot整合easy-es實(shí)現(xiàn)數(shù)據(jù)的增刪改查的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
Java實(shí)現(xiàn)批量導(dǎo)入excel表格數(shù)據(jù)到數(shù)據(jù)庫中的方法
這篇文章主要介紹了Java實(shí)現(xiàn)批量導(dǎo)入excel表格數(shù)據(jù)到數(shù)據(jù)庫中的方法,結(jié)合實(shí)例形式詳細(xì)分析了java導(dǎo)入Excel數(shù)據(jù)到數(shù)據(jù)庫的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10

