Spring @Value 用法小结,#与$的区别

583 阅读5分钟
原文链接: www.cnblogs.com

LarryZeal

佳句杯中游、歌舞自风流、如是风光不知愁; 忆得容颜凭照影,看来岁月似翻书

Spring @Value 用法小结,#与$的区别

20161016更新:这货其实是SpEL的功能,来这里看看吧:

Spring 4 官方文档学习(五)核心技术之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 +加关注
< 2019年7月 >
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

搜索

   

常用链接

我的标签

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜

Powered by:
博客园
Copyright © LarryZeal