您好,登錄后才能下訂單哦!
本篇內容介紹了“如何使用@Value”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
首先我們創建一個spring boot項目,不會的可以看下博主的另一篇文章idea創建Springboot 2.X項目
然后在application.yaml中配置如下內容
chilx: person:name: chilxage: 18
接著我們就是可以使用這兩個參數了
創建個一個Person類,使用就可以使用@Value注解了
@Value("${chilx.person.name}")private String name;@Value("${chilx.person.age}")private Integer age;
林妹妹:好的那我試下
過了一會--------
林妹妹:不對呀我這里項目報錯呀
博主:我看看,(瞟了一眼后)你呀你真是個小笨蛋,你看看錯誤提示,你使用的沒有聲明的參數
這一點我忘了和你說當我們使用@Value引用沒有聲明的參數時會報報錯的哦
例如 gender 這個屬性在配置文件中沒有聲明,我們在Perso類中添加一下內容
@Value("${chilx.person.gender}")private String gender;
啟動項目會報以下的錯誤
林妹妹:那有沒有解決的方法呀?
當然是有的呀,我們在引用屬性的時候可以給一個默認值,當屬性不存在的時候就賦值其默認值
我們改造下剛才的內容,在引用參數的后面加上冒號和默認值就可以了
// 默認值為空串@Value("${chilx.person.gender:}")private String gender1;// 默認值為null@Value("${chilx.person.nikeName:null}")private String gender2;// 默認值為 男@Value("${chilx.person.password:'男'}")private String gender3;
這個是剛才的問題就迎刃而解了
好了,@Value的基本使用就說完了,你還有什么不明白的嗎?
林妹妹:沒有了,現在基本的使用我已經明白了
博主:好,那下面我們繼續
接下來我們來看下數組類型
配置文件添加一下配置
chilx: person: ....hobbies: 籃球, 足球, 游戲
Person類中添加
@Value("${chilx.person.hobbies}")private String[] hobbies;
然后就可以了,簡單吧
林妹妹:嗯嗯,簡單簡單,套路我都知道了
博主:看把你厲害的,繼續繼續
接下來我們來學習下集合類型,List和Set使用是一樣的,只是Set會去重
繼續在application.yaml 中添加配置
chilx: person:....friend: 小明, 小紅
林妹妹:我知道一下怎么做了,這不是和Array類型的一樣么,誰還不會,不就是在Person類中添加,以下內容不就行了
@Value("${chilx.person.friend}")private List<String> friend;
得意的啟動項目中… 執行成功
怎么樣,我厲害吧
博主:厲害厲害,你也知道當屬性不存在的時候直接引用屬性是會報錯的,集合類型你知道怎么
林妹妹:這個,這個不知道耶(小聲)
博主:哈哈哈,看你還得嘚瑟不,這下知道自己的不足了吧
林妹妹:哎呀,不要說我了,快給我講講怎么處理呀
博主:好的,好的,這就給你說不要打我了,你要好好看看下面的代碼, 大致可以分為以下幾種情況
// 默認值 []@Value("${chilx.person.friend1:}")private List<String> friend1;// 默認值 [null]@Value("${chilx.person.friend1:null}")private List<String> friend2;// 默認值 [小明,小紅]@Value("${chilx.person.friend1:小明,小紅}")private List<String> friend3;// 以下是使用的EL表達式// 默認值 []@Value("#{'${chilx.person.friend1:}'.split(',')}")private List<String> friend4;// 默認值 [null]@Value("#{'${chilx.person.friend1:null}'.split(',')}")private List<String> friend5;// 默認值 [小明,小紅]@Value("#{'${chilx.person.friend1:小明,小紅}'.split(',')}")private List<String> friend6;// 默認值 []@Value("#{'${chilx.person.friend1:,}'.split(',')}")private List<String> friend7;
林妹妹:懂了,懂了原來是這樣的。咦,不對呀,Array類型的你怎么沒給我講默認值呀的問題呀
博主:想起來了呀,我以為你忽略了這個問題那
林妹妹::怎么你在懷疑我????
博主:不敢不敢,前面我之所以沒說是以為Array,List和Set在默認值方面是一樣的,知道了啵
其實集合類型還有其他幾種的注入類型的,只是不能使用@Value進行注解
等給你講完Map類型在給你詳細道來
來來咱們繼續
接下來咱們來說說字典類型哈
林妹妹:(小聲道)不都是一樣的套路,誰還不知道
博主當做沒聽到…
首先在配置文件中添加配置
chilx: person: .....pet: "{'小狗':'旺旺', '小貓':'喵喵'}"courses: "{'語文':100, '數學':99}"
java類中添加對應的屬性,注意@Value中要使用EL表達式
@Value("#{${chilx.person.pet}}")private Map<String, String> pet;@Value("#{${chilx.person.courses}}")private Map<String, String> courses;
這樣就可以了是不是很簡單
林妹妹:嗯吶
同理咱們來說下Map的默認值
// 默認值 null@Value("#{${chilx.person.courses1:{}}}")private Map<String, String> courses1;// 默認值 null@Value("#{${chilx.person.courses1:null}}")private Map<String, String> courses2;// 默認值 {k1:v1}@Value("#{${chilx.person.courses1:{k1:'v1'}}}")private Map<String, String> courses3;
可以看到,默認值的設置都大同小異
字典類型和集合類型一樣,也是有其他的配置方式的,只是也是不支持@Value的注入方式,休息下我們繼續哈
春去秋來,一晃眼十… 咳咳扯遠了,繼續繼續
前面咱們不是講過集合類型和字典類型還有其他的的注入方式呀,現在咱們趁熱打鐵學習一下
咱們現在使用的方式是批量綁定配置文件中的屬性
pom.xml中添加相關依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional></dependency>
新創建一個類User
添加對應的類注解,prefix屬性對應的是配置文件中的配置的層級,一直到倒數第二級
@ConfigurationProperties(prefix = "chilx.girlfriend")
編寫配置文件
chilx: girlfriend: name: 林妹妹 age: 18 hobbies: 唱歌, 跳舞 friend: 迎春, 惜春 pet1: 大象, 獅子 pet2: - 老虎 - 豹子 pet3: 小貓 小狗 courses: k1: 100 k2: 100
編寫User類
注意:類中的屬性要和配置文件中的最后一級的配置名稱要一致,強一致,切記切記。如果對應的配置不存在,則屬性為null
User類的具體如下
@Component@Getter@Setter@ToString@ConfigurationProperties(prefix = "chilx.girlfriend")public class User { private String name;private Integer age;/** * 默認值為空串 */private String gender;/** * 不存在為null */private String nikeName;/** * 默認值為 男 */private String password;private String[] hobbies;private List<String> friend;private List<String> pet1;private List<String> pet2;private List<String> pet3;private Map<String, Integer> courses;
做完上面幾步就對屬性綁定完成了,是不是簡單
林妹妹:是挺簡單,感覺比@Value方便多了,可以一次批量綁定,就是沒有@Value靈活
博主:魚和熊掌不可兼得耶
ConfigurationProperties不僅可以綁定屬性連對象都可以綁定,我給你演示下
在配置文件中添加以下配置
chilx: girlfriend: ..... boyfriend: { name: chilx, age: 18 }
在User類中添加對應屬性
private Boyfriend boyfriend;
以上兩步就解決了,是不是很簡單,是不是很簡單
@Value和ConfigurationProperties的卻別
@Value屬性填充是在bean實例化后調用populateBean(),由AutowiredAnnotationBeanPostProcessor注入填充
@ConfigurationProperties的屬性填充,是在initializeBean時, 由ConfigurationPropertiesBindingPostProcessor注入填充
結論:如果一個字段同時被兩種方式進行填充,最終填充是由@ConfigurationProperties決定
“如何使用@Value”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。