LarryZeal
佳句杯中游、歌舞自风流、如是风光不知愁; 忆得容颜凭照影,看来岁月似翻书
Spring @Value 用法小结,#与$的区别
20161016更新:这货其实是SpEL的功能,来这里看看吧:
起因
一直的用法是 @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.mysql
2 jdbc.url=3306@local
3 jdbc.user=admin
4 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 @PostConstruct
14 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 } View Code
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 @PostConstruct
17 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 @PostConstruct
21 public void run(){
22 System.out.println(driver);
23 System.out.println(name);
24 System.out.println(media);
25 }
26
27 }
9、执行Spring Boot项目,结果如下:
另外,默认值很浅显,也不再测试了。
有兴趣的可以自行测试。
放个码云的地址上来,希望能帮到一些人。
posted on 2016-09-26 18:08 LarryZeal 阅读(35350) 评论(3) 编辑 收藏
评论
#1楼 2017-05-04 18:25 NewSea
学习。 支持(0)反对(0)http://pic.cnblogs.com/face/u18191.jpg
#2楼 2018-05-15 16:55 像艳遇一样忧伤c
你好,请问控制台打印log颜色你是如何设置的 支持(0)反对(0)http://pic.cnblogs.com/face/1104554/20180801144657.png
#3楼[楼主]39750312018/5/15 21:42:02 2018-05-15 21:42 LarryZeal
@ 像艳遇一样忧伤c
用STS(Spring Boot Tools),运行Spring Boot程序,就是这样的。
当然自己也可以设置,你给文字加上ansi的颜色就行(还需要终端支持),略麻烦。
可以参考 org.springframework.boot.ansi.AnsiOutput 支持(0) 反对(0) 刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。 【推荐】超50万C++/C#源码: 大型实时仿真组态图形源码
【前端】SpreadJS表格控件,可嵌入系统开发的在线Excel
【推荐】码云企业版,高效的企业级软件协作开发管理平台
【推荐】程序员问答平台,解决您开发中遇到的技术难题
导航
公告
昵称:LarryZeal园龄:3年6个月
粉丝:514
关注: 6 +加关注
|
||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
|---|---|---|---|---|---|---|
| 30 | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
统计
- 随笔 - 234
- 文章 - 0
- 评论 - 51
- 引用 - 0
搜索
常用链接
我的标签
随笔档案
- 2019年5月 (1)
- 2019年4月 (1)
- 2019年3月 (1)
- 2019年2月 (1)
- 2019年1月 (1)
- 2018年12月 (2)
- 2018年10月 (1)
- 2018年8月 (1)
- 2018年7月 (3)
- 2018年6月 (1)
- 2018年5月 (1)
- 2018年4月 (3)
- 2018年3月 (2)
- 2018年2月 (1)
- 2018年1月 (4)
- 2017年12月 (3)
- 2017年11月 (1)
- 2017年10月 (5)
- 2017年9月 (3)
- 2017年8月 (6)
- 2017年7月 (2)
- 2017年6月 (2)
- 2017年5月 (8)
- 2017年4月 (9)
- 2017年3月 (9)
- 2017年2月 (5)
- 2017年1月 (11)
- 2016年12月 (25)
- 2016年11月 (4)
- 2016年10月 (20)
- 2016年9月 (18)
- 2016年8月 (11)
- 2016年7月 (17)
- 2016年6月 (24)
- 2016年5月 (18)
- 2016年4月 (5)
- 2016年3月 (3)
- 2016年1月 (1)
最新评论
- 1. Re:Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion
- 非常详细耐心
- --g29tony
- 2. Re:Spring Boot 官方文档学习(一)入门及使用
- 虽然不太懂,依然觉得很厉害哈哈
- --dsasa
- 3. Re:Spring Boot 官方文档学习(一)入门及使用
- 不错,学习了!分享8个Springboot项目:
- --小柒2012
- 4. Re:Spring Boot学习
- 感谢楼主
- --只做你的丶eric
- 5. Re:Spring Boot 官方文档学习(一)入门及使用
- Java 微服务实践 - Spring Boot 免费视频: Java 微服务实践 - Spring Cloud 免费视频:...
- --分享的世界
阅读排行榜
- 1. Spring Boot 官方文档学习(一)入门及使用(558827)
- 2. Spring Boot学习(141939)
- 3. Spring Tools Suite (STS) 简介(49836)
- 4. MyBatis-Spring-Boot 使用总结(45889)
- 5. Spring Boot项目的打包和部署(45751)
评论排行榜
- 1. Spring Boot学习(22)
- 2. Spring Boot 官方文档学习(一)入门及使用(8)
- 3. Spring @Value 用法小结,#与$的区别(3)
- 4. Intellij IDEA:maven的本地仓库问题(3)
- 5. Spring Data Redis学习(2)
推荐排行榜
- 1. Spring Boot学习(32)
- 2. Spring Boot 官方文档学习(一)入门及使用(29)
- 3. Spring @Value 用法小结,#与$的区别(4)
- 4. Intellij IDEA Module 的Language Level的问题(4)
- 5. SpringMVC接收checkbox传值(3)
博客园
Copyright © LarryZeal
