Springboot入門教程系列ConfigurationProperties和value的區(qū)別

首先我們本節(jié)的知識點基于上節(jié)Springboot入門教程系列配置文件的基礎上進行知識點的拓展瑞凑,首先我們進行代碼的改造【Person類】

@Component
public class Person {
@Value("${person.name}")
private String name;
@Value("#{10*2}")
private Integer age;
@Value("false")
private Boolean boos;
@Value("${person.birth}")
private Date birth;
private Map<String,Object> map;
private List<Object> list;
private Cat cat;

上述代碼我們利用spring的value注解來進行我們javaBean的屬性的獲取晴及,從上面的代碼中可以看到注解value支持${}【作為占位符來從配置文件中獲取對應屬性值】、以及SPEL表達式【#{}】運算等

同樣利用Springboot的單元格測試來測試一把我們上述的代碼

image.png

同樣的我們發(fā)現(xiàn)也可以獲取對應屬性的值奸攻,在這里也體現(xiàn)出了我們ConfigurationProperties和注解Value的明顯之處

    1. 注解ConfigurationProperties:可以幫助我們將一個javaBean和對應屬性配置進行一一映射和綁定
    1. 注解Value:如果我們只是想用該javaBean的某些屬性监婶,可以采用注解value的方式
兩者區(qū)別
  • 1.ConfigurationProperties支持松散綁定而Value也支持

簡單的代碼改造般哼,將person的name屬性改為lastName如下:

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boos;
private Date birth;
private Map<String,Object> map;
private List<Object> list;
private Cat cat;

同樣改造我們的配置文件

person:
      last-name: 小何
      age: 20
      birth: 2019/01/01
      map: {k1: v1,k2: v2}
      list:
        - 小黑
        - 隔壁老王
     cat:
        name: 小虎
        age: 10
    boos: true

測試把敢,首先是ConfigurationProperties的測試

ConfigurationProperties配置測試.png

接著我們利用注解Value的方式來獲取屬性,調整我們的代碼如下:

@Component
public class Person {
@Value("${person.last-name}")
private String lastName;
@Value("#{10*2}")
private Integer age;
@Value("false")
private Boolean boos;
@Value("${person.birth}")
private Date birth;
private Map<String,Object> map;
private List<Object> list;
private Cat cat;

測試結果如下圖所示:

image.png
  • 2.ConfigurationProperties不支持SPEL表達式

首先來調整我們的配置文件如下:

  person:
      last-name: 小王
      age: {10*2}
      birth: 2019/01/01
      map: {k1: v1,k2: v2}
      list:
          - 小黑
          - 隔壁老王
    cat:
         name: 小虎
         age: 10
    boos: true

測試結果如下圖所示:

SPEL表達式測試.png

至于注解value是支持的,前面我們已經(jīng)測試過了

-3. ConfigurationProperties支持JSR303數(shù)據(jù)校驗而Value不支持

調整我們的person代碼

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@Email  //表示我們的lastName名字必須是郵件格式的
private String lastName;
@Min(message = "年齡必須大于23",value = 23)
private Integer age;
private Boolean boos;
private Date birth;
private Map<String,Object> map;
private List<Object> list;
private Cat cat;

在pon文件中添加如下依賴:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
        <version>2.3.0.RELEASE</version>
    </dependency>

測試結果如下圖所示:

image.png

可以看到的是我們的檢驗起了作用蜈亩,接著我們來看看注解@Value懦窘,修改我們的代碼:

@Component
//@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@Value("${person.last-name}")
@Email  //表示我們的lastName名字必須是郵件格式的
private String lastName;
@Value("#{10*2}")
@Min(message = "年齡必須大于23",value = 23)
private Integer age;
@Value("false")
private Boolean boos;
@Value("${person.birth}")
private Date birth;
private Map<String,Object> map;
private List<Object> list;
private Cat cat;

測試結果如下圖所示:

JSR303注解value測試結果.png

從上述結果尅看到的是我們的注解Value是不支持JSR303檢驗的

    1. ConfigurationProperties:支持復雜類型封裝【map等】,value不支持

修改我們的person的代碼

@Component
//@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@Value("${person.last-name}")
@Email  //表示我們的lastName名字必須是郵件格式的
private String lastName;
@Value("#{10*2}")
@Min(message = "年齡必須大于23",value = 23)
private Integer age;
@Value("false")
private Boolean boos;
@Value("${person.birth}")
private Date birth;
@Value("${person.map}")
private Map<String,Object> map;
private List<Object> list;
private Cat cat;

我們通過注解value來獲取map的數(shù)據(jù)稚配,測試結果如下圖所示:

image.png

直接報錯畅涂,這說明了注解Value是不支持的

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市药有,隨后出現(xiàn)的幾起案子毅戈,更是在濱河造成了極大的恐慌,老刑警劉巖愤惰,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苇经,死亡現(xiàn)場離奇詭異,居然都是意外死亡宦言,警方通過查閱死者的電腦和手機扇单,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奠旺,“玉大人蜘澜,你說我怎么就攤上這事∠炀危” “怎么了鄙信?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忿晕。 經(jīng)常有香客問我装诡,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任鸦采,我火速辦了婚禮宾巍,結果婚禮上,老公的妹妹穿的比我還像新娘渔伯。我一直安慰自己顶霞,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布锣吼。 她就那樣靜靜地躺著选浑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吐限。 梳的紋絲不亂的頭發(fā)上鲜侥,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音诸典,去河邊找鬼。 笑死崎苗,一個胖子當著我的面吹牛狐粱,可吹牛的內容都是我干的。 我是一名探鬼主播胆数,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼肌蜻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了必尼?” 一聲冷哼從身側響起蒋搜,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎判莉,沒想到半個月后豆挽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡券盅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年帮哈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锰镀。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡娘侍,死狀恐怖,靈堂內的尸體忽然破棺而出泳炉,到底是詐尸還是另有隱情憾筏,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布花鹅,位于F島的核電站氧腰,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜容贝,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一自脯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斤富,春花似錦膏潮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至油额,卻和暖如春叠纷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背潦嘶。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工涩嚣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掂僵。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓航厚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锰蓬。 傳聞我的和親對象是個殘疾皇子幔睬,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353