关于@Value注入List,Map及设置默认值问题
作者:-luking-
这篇文章主要介绍了@Value注入List,Map及设置默认值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
@Value注入List,Map及设置默认值
注入String
- yml
populate: string: stringValue
- 注入
@Value("${populate.string2:}") // 默认值是空字符串“” private String stringV; @Value("${populate.string:null}") // 默认值是null private String stringV2; @Value("${populate.string:defaultValue}") // 默认值是“defaultValue” private String stringV3;
注入Array
- yml
populate: array: array1,array2,array3
- 注入
@Value("${populate.array:}") // 默认值是[] private String[] array; @Value("${populate.array:a1,a2,a3}") // 默认值是[a1,a2,a3] private String[] array1;
注入List
- yml
populate: list: list1,list2,list3
- 注入
#{'${populate.list:}'.split(',')
: #{} 内是SpEL表达式,使用 split 函数指定了分隔符;
${populate.list}
:不指定分隔符则会默认以,
作为分隔符。(可能较低版本的Spring不支持,未验证)
@Value("${populate.list:}") // 默认值是空List,{} private List<String> list0; @Value("#{'${populate.list:}'.split(',')}") // 默认值是包含一个空字符串的List {“”} private List<String> list1; @Value("${populate.list:l1,l2,l3}") // 默认值是{l1,l2,l3} private List<String> list2; @Value("#{'${populate.list:l1,l2,l3}'.split(',')}") // 默认值是{l1,l2,l3} private List<String> list3; @Value("#{'${populate.list:,}'.split(',')}") // 默认值是空List,{} private List<String> list4;
注入Map
yml
- key可以但不必被单引号包围
- value必须被单引号包围
populate: map: "{ 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' }" mapList: "{ key1: 'v11,v12', key2: 'v21,v22', key3: 'v31,v32' }"
- 注入
@Value("#{${populate.map:{}}}") // 默认值是null private Map<String,String> map; @Value("#{${populate.map:null}}}") // 默认值是null private Map<String, String> map2; @Value("#{${populate.map:{k1:'v1',k2:'v2'}}}") // 默认值是{"k1":"v1","k2":"v2"} private Map<String, String> map3; @Value("#{${populate.mapList:{}}}") // 值为{"key1":["v11","v12"],"key2":["v21","v22"],"key3":["v31","v32"]} private Map<String,List<String>> mapList;
${} 与 #{} #{…}
- #{…} 主要用于加载外部属性文件中的值
- ${…} 用于执行SpEl表达式,并将内容赋值给属性
- #{…} 和 $ {…} 可以混合使用,但是必须#{}外面,${}在里面
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。