最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用@Value 注入 List 類型的配置屬性需要注意的 BUG

 更新時間:2021年08月02日 15:10:11   作者:PostTruth  
這篇文章主要介紹了使用@Value 注入 List 類型的配置屬性需要注意的 BUG,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@Value 注入 List 類型的配置屬性

@Value 注解可以方便的幫助我們注入配置屬性值.

那么當注入一個 List 類型時該怎么做呢?

想必大家都會知道,可以使用下面這種寫法:

 @Value("#{'${zf.ids}'.split(',')}")
 private List<Integer> ids;

上面的配置簡單說下就是,先使用 ${zf.ids} 拿到配置文件中 zf.ids 屬性的值,然后使用 #{} 也就是 SPEL 表達式語言進行按,拆分,得到的結果轉為 List<Integer>類型的值.

這樣做沒什么問題,可以說完美解決了 注入復雜類型的配置文件的屬性

那么問題來了

如果 我們想要配置文件沒有 zf.ids屬性的時候注入一個空的 List 該怎么辦呢?

這時候你可能說簡單嘛,給 ${zf.ids}加個默認值就好了: ${zf.ids:}

 @Value("#{'${zf.ids:}'.split(',')}")
 private List<Integer> ids;

如上面所示,我們使用:來給 zf.ids添加一個默認值,為空.

那么這時候,我們的 ids 屬性值的內(nèi)容是什么呢?

是 空的 List<Integer>對象? 還是 ids 的值就是個 null 呢?

我們來實踐一下:看看到底是什么?

打個斷點,調(diào)試走起,可以看到:

image-20200918102125292

竟然不是 空 List,而且有一個值,我們看下 List 中的值到底是什么:

image-20200918102228396

發(fā)現(xiàn)竟然只有一個值為 null 的元素 !

跟蹤源碼查看 @Value("#{'${zf.ids:}'.split(',')}") 的解析過程

其中最關鍵的一步就是下面整個方法org.springframework.beans.TypeConverterDelegate#convertIfNecessary(java.lang.String, java.lang.Object, java.lang.Object, java.lang.Class, org.springframework.core.convert.TypeDescriptor)

會發(fā)現(xiàn): ${zf.ids:) 被解析為 "" 一個空的字符串;

然后調(diào)用 SpEL 再次解析: #{''.split(',')} 即 返回一個數(shù)組,這個數(shù)組只有一個空的字符串

在這里插入圖片描述

然后 Spring 會運用一系列的 Converter 進行類型轉換,關鍵就在這一步:

String[] --> List<Integer> 時, 把數(shù)組中的空字符串轉為 Integer 類型時,由于不能傳喚,默認就是個 null

整個轉過過程就是

[""] --> {""} --> {null}

最后我們就得到了一個只有一個 null 值的 List 集合!

至此,真相大白,在使用 @Value("#{'${zf.ids:}'.split(',')}") 注入 List 屬性的時候尤其需要注意這個問題,搞不好就是個線上 bug ! ! !

@Value注入map、List,yaml格式

使用@Value注入map、List

實體類

@Value("#{'${list}'.split(',')}")
private List<String> list;
 
@Value("#{${maps}}")  
private Map<String,String> maps;

配置文件

list: topic1,topic2,topic3
maps: "{key1: 'value1', key2: 'value2'}"

ps:注意上面的map解析中,一定要用""把map所對應的value包起來,要不然解析會失敗,導致不能轉成 Map<String,String>。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論

安陆市| 申扎县| 都安| 新巴尔虎右旗| 焦作市| 石柱| 寿光市| 金堂县| 正蓝旗| 荆门市| 信阳市| 洪湖市| 龙泉市| 女性| 伽师县| 兴海县| 黑山县| 翁源县| 桓台县| 临夏县| 泸州市| 长沙市| 镇沅| 庆元县| 繁昌县| 福海县| 桐乡市| 广安市| 昌宁县| 神池县| 馆陶县| 桓仁| 延吉市| 浪卡子县| 武强县| 蒙阴县| 黄平县| 神木县| 雅江县| 鄂州市| SHOW|