Spring @Value 用法小结,#与$的区别
来源:互联网 发布:手机在linux查arp 编辑:程序博客网 时间:2024/06/06 23:54
原文链接:http://www.cnblogs.com/larryzeal/p/5910149.html
起因
一直的用法是 @Value("${jdbc.driverClass}") 这样,但在Spring官方文档里又看到 @Value("#{a.b}")的用法。
于是研究了下。
结论
@Value的值有两类:
① ${ property : default_value }
② #{ obj.property? : default_value }
就是说,第一个注入的是外部参数对应的property,第二个则是SpEL表达式对应的内容。
那个 default_value,就是前面的值为空时的默认值。注意二者的不同。
例子
1、使用STS 新建一个Spring Boot项目,依赖部分留空。
2、在application.properties 文件中添加如下内容:
1 jdbc.driverClass=com.mysql2 jdbc.url=3306@local3 jdbc.user=admin4 jdbc.pwd=pwd
3、新建类ValueDemo,内容如下:
1 package cn.larry.spring; 2 3 import javax.annotation.PostConstruct; 4 5 import org.springframework.beans.factory.annotation.Value; 6 import org.springframework.stereotype.Component; 7 8 @Component 9 public class ValueDemo {10 @Value("${jdbc.driverClass}")11 private String driver;12 13 @PostConstruct14 public void run(){15 System.out.println(driver);16 }17 18 }
4、启动Spring Boot项目,输出如下:
这就是常用的 ${ properties },很简单。继续。
5、再新建一个类AnotherObj,内容如下:
1 package cn.larry.spring; 2 3 import org.springframework.beans.factory.annotation.Value; 4 import org.springframework.stereotype.Component; 5 6 @Component 7 public class AnotherObj { 8 @Value("${jdbc.user}") 9 private String name;10 @Value("{jdbc.pwd}")11 private String pwd;12 13 public String getName() {14 return name;15 }16 17 public void setName(String name) {18 this.name = name;19 }20 21 public String getPwd() {22 return pwd;23 }24 25 public void setPwd(String pwd) {26 this.pwd = pwd;27 }28 29 }
6、修改ValueDemo,如下:
1 package cn.larry.spring; 2 3 import javax.annotation.PostConstruct; 4 5 import org.springframework.beans.factory.annotation.Value; 6 import org.springframework.stereotype.Component; 7 8 @Component 9 public class ValueDemo {10 @Value("${jdbc.driverClass}")11 private String driver;12 13 @Value("#{anotherObj.name}")14 private String name;15 16 @PostConstruct17 public void run(){18 System.out.println(driver);19 System.out.println(name);20 }21 22 }
7、再次执行Spring Boot项目,结果如下:
这里展示的是 #{ SpEL }的效果。
8、有意思的是,二者可以结合使用,如:#{ '${}' } ,注意单引号,注意不能反过来,测试如下。
application.properties文件中添加一行:media=jdbc.url
ValueDemo类修改如下:
1 package cn.larry.spring; 2 3 import javax.annotation.PostConstruct; 4 5 import org.springframework.beans.factory.annotation.Value; 6 import org.springframework.stereotype.Component; 7 8 @Component 9 public class ValueDemo {10 @Value("${jdbc.driverClass}")11 private String driver;12 13 @Value("#{anotherObj.name}")14 private String name;15 16 // @Value("${ '#{anotherObj.media}' }") //这个不支持。17 @Value("#{ '${media}' }")18 private String media;19 20 @PostConstruct21 public void run(){22 System.out.println(driver);23 System.out.println(name);24 System.out.println(media);25 }26 27 }
9、执行Spring Boot项目,结果如下:
另外,默认值很浅显,也不再测试了。
有兴趣的可以自行测试。
放个码云的地址上来,希望能帮到一些人。
项目地址
- Spring @Value 用法小结,#与$的区别
- Spring @Value 用法小结,#与$的区别
- spring mvc中的@RequestMapping value用法小结
- @Value("#{}")与@Value("${}")的区别
- @Value("#{}")与@Value("${}")的区别
- Spring中@Value的用法
- Spring @Value注解的用法
- JS中innerHTML与value、val的用法区别
- JS中innerHTML与value、val的用法区别
- typedef用法小结 以及与define的区别
- type用法小结及与define的区别
- Text与Value的区别
- defaultValue与value的区别
- Spring @value注解的错误用法
- spring ref和value的用法
- val()和.value的区别和用法
- Spring @Value用法
- Spring @Value用法
- 2017.4.14 随机发牌
- 设计模式原则—迪米特原则
- Swift 3.0 学习笔记-3-集合类型
- 云掌通使用过程中的一个小问题
- mongodb,mongovue与pycharm之大总结!!!
- Spring @Value 用法小结,#与$的区别
- 状压DP Gym
- 第七天2017/04/14(引用与const、C++基本知识)
- NC编译器结题以及软件重用性的思索
- SpringMVC原理图
- 图像分割(二)——阈值分割/区域生长/区域分裂合并法
- C# 数组最大值与最小值
- (转)ImageView 设置图片
- Qt 帧动画 (QWidget)