SpringBoot?@Value與@ConfigurationProperties二者有哪些區(qū)別
@Value 和 @ConfigurationProperties 注解都能讀取配置文件中的屬性值并綁定到 JavaBean 中,但兩者存在以下不同。
區(qū)別 | @ConfigurationProperties | @Value |
使用位置不同 | 標(biāo)注在 JavaBean 的類名上 | 標(biāo)注在 JavaBean 的屬性上 |
功能不同 | 用于批量綁定配置文件中的配置 | 單值綁定 |
松散綁定(松散語法) | 支持 | 部分支持 |
Spel | 不支持 | 支持 |
復(fù)雜類型封裝 | 支持 | 支持,比較繁瑣 |
JSR303數(shù)據(jù)校驗 | 支持 | 不支持 |
應(yīng)用場景不同 | 通過JavaBean獲取整個配置文件 | 單個屬性值 |
說明
使用位置不同
- @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:只能一個一個的指定需要綁定的配置。
松散綁定支持不同
@ConfigurationProperties:支持松散綁定(松散語法),例如實體類 Person 中有一個屬性為 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、以及對象等;
- @Value:支持基本數(shù)據(jù)類型的封裝,例如字符串、布爾值、整數(shù)等類型, 對集合Map list set配置有要求
屬性校驗
- @Value不支持屬性校驗
- @ConfigurationProperties 支持屬性校驗
@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 兩個注解之間,并沒有明顯的優(yōu)劣之分,它們只是適合的應(yīng)用場景不同而已。
- 若只是獲取配置文件中的某項值,則推薦使用 @Value 注解;
- 若專門編寫了一個 JavaBean 來和配置文件進(jìn)行映射,則建議使用 @ConfigurationProperties 注解。
在選用時,根據(jù)實際應(yīng)用場景選擇合適的注解能達(dá)到事半功倍的效果。
到此這篇關(guān)于SpringBoot @Value與@ConfigurationProperties二者有哪些區(qū)別的文章就介紹到這了,更多相關(guān)SpringBoot @Value與@ConfigurationProperties內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Config下的Spring Test幾種方式實例詳解
這篇文章主要介紹了Java Config下的Spring Test方式實例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05Java Thread之Sleep()使用方法總結(jié)
這篇文章主要介紹了Java Thread之Sleep()使用方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Springboot集成Quartz實現(xiàn)定時任務(wù)代碼實例
這篇文章主要介紹了Springboot集成Quartz實現(xiàn)定時任務(wù)代碼實例,任務(wù)是有可能并發(fā)執(zhí)行的,若Scheduler直接使用Job,就會存在對同一個Job實例并發(fā)訪問的問題,而JobDetail?&?Job方式,Scheduler都會根據(jù)JobDetail創(chuàng)建一個新的Job實例,這樣就可以規(guī)避并發(fā)訪問問題2023-09-09使用Spring Boot創(chuàng)建Web應(yīng)用程序的示例代碼
本篇文章主要介紹了使用Spring Boot創(chuàng)建Web應(yīng)用程序的示例代碼,我們將使用Spring Boot構(gòu)建一個簡單的Web應(yīng)用程序,并為其添加一些有用的服務(wù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05Java之多個線程順序循環(huán)執(zhí)行的幾種實現(xiàn)
這篇文章主要介紹了Java之多個線程順序循環(huán)執(zhí)行的幾種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09