中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用@Value

發布時間:2021-10-14 10:21:35 來源:億速云 閱讀:112 作者:iii 欄目:編程語言

本篇內容介紹了“如何使用@Value”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1、String類型

首先我們創建一個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

林妹妹:那有沒有解決的方法呀?

當然是有的呀,我們在引用屬性的時候可以給一個默認值,當屬性不存在的時候就賦值其默認值

我們改造下剛才的內容,在引用參數的后面加上冒號和默認值就可以了

// 默認值為空串@Value("${chilx.person.gender:}")private String gender1;// 默認值為null@Value("${chilx.person.nikeName:null}")private String gender2;// 默認值為 男@Value("${chilx.person.password:'男'}")private String gender3;

這個是剛才的問題就迎刃而解了

好了,@Value的基本使用就說完了,你還有什么不明白的嗎?

林妹妹:沒有了,現在基本的使用我已經明白了

博主:好,那下面我們繼續

2、Array類型

接下來我們來看下數組類型

配置文件添加一下配置

chilx:
  person:
 		....hobbies: 籃球, 足球, 游戲

Person類中添加

@Value("${chilx.person.hobbies}")private String[] hobbies;

然后就可以了,簡單吧

林妹妹:嗯嗯,簡單簡單,套路我都知道了

博主:看把你厲害的,繼續繼續

3、List/Set集合類型

接下來我們來學習下集合類型,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類型在給你詳細道來

來來咱們繼續

4、 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的注入方式,休息下我們繼續哈

春去秋來,一晃眼十… 咳咳扯遠了,繼續繼續

5、ConfigurationProperties

前面咱們不是講過集合類型和字典類型還有其他的的注入方式呀,現在咱們趁熱打鐵學習一下

咱們現在使用的方式是批量綁定配置文件中的屬性

  • 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”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临江市| 钟祥市| 朔州市| 方正县| 合川市| 罗江县| 厦门市| 通化县| 新蔡县| 焉耆| 赤水市| 资溪县| 廊坊市| 博白县| 金寨县| 获嘉县| 胶南市| 和林格尔县| 迁西县| 兴业县| 广宁县| 澄城县| 辉县市| 长葛市| 南靖县| 秦皇岛市| 吉林省| 镇沅| 宝鸡市| 莱西市| 财经| 鄂温| 广水市| 黔江区| 乌什县| 东平县| 新绛县| 利川市| 大方县| 桐乡市| 凤山县|