private
String stringV2
;
@Value
(
"${populate.string:defaultValue}"
)
private
String stringV3
;
populate:
array: array1,array2,array3
@Value("${populate.array:}")
private String[] array;
@Value("${populate.array:a1,a2,a3}")
private String[] array1;
populate:
list: list1,list2,list3
#{'${populate.list:}'.split(','): #{} 内是SpEL表达式,使用 split 函数指定了分隔符;${populate.list}:不指定分隔符则会默认以, 作为分隔符。(可能较低版本的Spring不支持,未验证)
@Value("${populate.list:}")
private List<String> list0;
@Value("#{'${populate.list:}'.split(',')}")
private List<String> list1;
@Value("${populate.list:l1,l2,l3}")
private List<String> list2;
@Value("#{'${populate.list:l1,l2,l3}'.split(',')}")
private List<String> list3;
@Value("#{'${populate.list:,}'.split(',')}")
private List<String> list4;
- key可以但不必被单引号包围
- value必须被单引号包围
populate:
map: "{
'key1': 'value1',
'key2': 'value2',
'key3': 'value3'
mapList: "{
key1: 'v11,v12',
key2: 'v21,v22',
key3: 'v31,v32'
@Value("#{${populate.map:{}}}")
private Map<String,String> map;
@Value("#{${populate.map:null}}}")
private Map<String, String> map2;
@Value("#{${populate.map:{k1:'v1',k2:'v2'}}}")
private Map<String, String> map3;
@Value("#{${populate.mapList:{}}}")
private Map<String,List<String>> mapList;
- #{…} 主要用于加载外部属性文件中的值
- ${…} 用于执行SpEl表达式,并将内容赋值给属性
- #{…} 和 $ {…} 可以混合使用,但是必须#{}外面,${}在里面
@Value注入map、List、Bean、static变量方式及详细使用
1、对于@Autowired声明的数组、Collection集合的注入,Spring会把容器中所有类型与数组(集合)中元素类型相同的bean汇总,构造出一个数组(集合),注入到目标数组(集合)中。
2、对于@Autowired声明的map集合的注入,map的key注入容器中所有类型与bean类型相同的bean的id,value注入该bean的id对应的对象。
3、对于类对象注入,@Qualifier(“payServiceImpl1”)指定注入对象的id 。...
${…}用法
{}里面的内容必须符合SpEL表达式,详细的语法,以后可以专门开新的文章介绍, 通过@Value(“${spelDefault.value}”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如@Value("${spelDefault.value:127.0.0.1}")
详细代码如下:
// 如果属性文件没有s.