在SpringBoot中,我们可以使用@Value注解快速的进行配置的注入,在使用时,我们一般使用${…}
的形式,但有时候也能见到#{…}
,他俩有啥区别呢?
#{…}和${…}的区别
${…}
用于加载外部属性文件中的值#{…}
用于执行SpEL表达式,并将内容赋值给属性#{…}
和${…}
可以混合使用,但是必须#{}
外面,${}
在里面。(很好理解,要先用$将值取到之后才有数据可以执行SpEL表达式对数据进行操作)
实际使用代码
//====注入单值====
/**
* 未配置会报错
* Could not resolve placeholder 'string' in value "{${string}}"
*/
// @Value("${string}")
// private String string;
/**
* 带默认值,默认值为:空字符串
*/
@Value("${string:}")
private String string1;
/**
* 带默认值,默认值为:abc
*/
@Value("${string:abc}")
private String string2;
//====注入List====
/**
* 带默认值,默认值为:空
*/
@Value("#{'${list:,}'.split(',')}")
private List<String> list;
/**
* 错误样例:记得冒号后面带,否则得到的结果是个长度为1的list,可以对比看效果
*/
@Value("#{'${list:}'.split(',')}")
private List<String> list1;
/**
* 带默认值,默认值为:a,b,c
*/
@Value("#{'${list:a,b,c}'.split(',')}")
private List<String> list2;
//====注入Set====
/**
* 带默认值,默认值为:空
*/
@Value("#{'${set:,}'.split(',')}")
private Set<String> set;
//====注入Map====
/**
* 带默认值,默认值为:null
*/
@Value("#{${map:{}}}")
private Map<String, String> map;
/**
* 带默认值,默认值为:{"k1":"v1","k2":"v2"}
*/
@Value("#{${map:{k1:'v1',k2:'v2'}}}")
private Map<String, String> map1;
注入效果