1前言
以前对spring中@Value没有太注意,看到同事把这个注解用的花里胡哨,我就感觉铁子牛逼666呀,迭代版本结束了,我就对这个注解研究研究,争取也牛逼666。
2 #号和$符的不同用法
2.1 $符的用法
总的来说就是:用于获取配置文件中的属性值;
2.1.1简单用法:
通常用于获取写在application.properties中的内容,例如在配置文件中:
jdbc.driverClass=com.mysql
jdbc.url=3306@local
jdbc.user=admin
则在类中可以通过@Value("${jdbc.url}")来获取相应的值
例如:
@Value("${jdbc.url}")
private String url;
2.1.2 冒号的用途
@Value("${jdbc.url:}")
解释说明:我们有时候也是看到有人这样写的,这样写表示的意思是 如果配置文件中没有配置jdbc.url 变量,则取空值,而不是抛错
3.1 #号的用法
一句话表述:是SpEL表达式的值,可以表示常量的值,或者获取bean中的属性
3.1.1简单用法
@Value("#{1}")
private String num; //num=1
@Value("#{dataSource.url}") //获取bean的属性,bean(对象)为dataSource,属性为url
private String jdbcUrl;
3.2 #号和$的组合用法
3.2.1举例
- 配置文件
- 代码读取
@Value("#{'${test.list}'.split(',')}")
private List<String> testList; //testList = [1, 2, 3, 4, 5, 6]
// 用:(冒号)时,当test.list.empty为null
@Value("#{'${test.list.empty:}'.split(',')}")
private List<String> testListEmpty; //testListEmpty = []
从上面的【代码读取】中可以看出当用 :(冒号),test.list.empty 可以不配置,但是用属性testListEmpty不为null,为空数组;下面代码解决此种情况。
@Value("#{'${test.list.empty:}'.empty ? null : '${test.list.empty:}'.split(',')}")
private List<String> testList; // null