`

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

 
阅读更多

起因

一直的用法是 @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 文件中添加如下内容:

 jdbc.driverClass=com.mysql
 jdbc.url=3306@local
 jdbc.user=admin
 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 }
 

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项目,结果如下:

 

 

分享到:
评论

相关推荐

    Spring mvc中 RequestMapping 6个基本用法小结

    Spring MVC 中的 RequestMapping 6个基本用法小结 Spring MVC 是一个基于 Java 的 Web 应用程序框架,提供了强大的 RequestMapping 机制来处理 HTTP 请求。在 Spring MVC 中,RequestMapping 是一个核心组件,负责...

    spring学习小结

    【Spring 框架学习小结】 Spring 是一个流行的 Java 应用开发框架,它以其控制反转(Inversion of Control, IOC)和面向切面编程(Aspect-Oriented Programming, AOP)为核心特性,被誉为轻量级框架。下面将详细...

    Spring配置的5种方式

    #### 五、小结 Spring框架提供了丰富的事务管理方式,使得开发者可以根据项目需求选择最适合自己的方案。通过本文的介绍,相信读者已经对Spring事务配置的五种方式有了更深入的理解。在实际开发过程中,开发者可...

    spring小结之配置二级缓存!

    本文将围绕“Spring小结之配置二级缓存”这一主题,详细阐述二级缓存的概念、作用以及如何在Spring中进行配置。 首先,二级缓存是指在应用程序中的第一级缓存(通常是数据库连接池提供的缓存)之外的另一层缓存机制...

    spring+velocity发送邮件

    根据提供的信息,我们可以详细探讨...### 小结 通过Spring框架结合Velocity模板引擎,可以方便地实现邮件的自动化发送。这种方式不仅可以提高邮件内容的定制化程度,还可以有效减少重复性的手工操作,提升工作效率。

    spring 3.1中的cache小结

    在Spring 3.1版本中,引入了对缓存的支持,极大地提高了应用程序的性能和效率。这个特性使得开发者能够方便地在应用中集成缓存机制,而无需深入了解底层缓存库的实现细节。本文将围绕Spring 3.1的缓存功能进行详细...

    Spring攻略(第二版 中文高清版).part1

    7.6 使用RichFaces与Spring WebFlow协作 275 7.6.1 问题 275 7.6.2 解决方案 275 7.6.3 方法 275 7.7 小结 279 第8章 Spring @MVC 280 8.1 用Spring MVC开发简单的Web应用 280 8.1.1 问题 280 ...

    百知教育spring笔记

    #### 三、小结 本部分介绍了Spring框架中如何配置数据源以及SessionFactory,其中涉及了DBCP和C3P0两种数据源的配置方式以及Hibernate的SessionFactory配置方法。这些配置使得开发人员能够更方便地管理和使用数据库...

    Spring 的定时任务

    #### 四、小结 通过以上步骤,我们已经成功配置了一个基于Spring和Quartz的定时任务,该任务每隔50秒会自动调用`LocalCacheRefreshServiceImpl`中的`refreshLocalCache`方法,以刷新本地缓存。这种方式不仅简单易用...

    spring boot 的常用注解使用小结

    Spring Boot 中的常用注解使用小结 作为一个java开发人员,特别是使用 Spring Boot 框架的开发人员,了解常用的注解是非常重要的。本文主要总结了 Spring Boot 中的常用注解,包括 @RestController、@...

    spring配置.txtspring配置.txt

    ### 小结 通过对给定文件的分析,我们了解了Spring框架中XML配置的基本用法,包括如何配置`ContextLoaderListener`和`ContextLoaderServlet`,以及如何利用自动装配机制来简化依赖注入过程。这些配置对于构建基于...

    spring mvc注释文档

    #### 小结 本文介绍了Spring MVC在Spring 2.5版本中引入的基于注解的配置方式,包括使用`@Controller`、`@RequestMapping`等注解来定义Controller及其处理方法,以及如何配置DispatcherServlet等关键组件。通过使用...

    Spring攻略(第二版 中文高清版).part2

    7.6 使用RichFaces与Spring WebFlow协作 275 7.6.1 问题 275 7.6.2 解决方案 275 7.6.3 方法 275 7.7 小结 279 第8章 Spring @MVC 280 8.1 用Spring MVC开发简单的Web应用 280 8.1.1 问题 280 ...

    spring事务配置的五种方式

    #### 五、小结 本文详细介绍了Spring事务配置的五种方式,并以第一种方式为例进行了具体分析。通过了解这五种配置方式,开发者可以根据项目的实际情况选择最合适的方法来实现事务管理,从而提高系统的稳定性和可靠性...

    spring各种属性的注入

    #### 小结 通过本文档的学习,我们可以了解到Spring框架中各种属性注入的基本方法。这些方法不仅限于基本数据类型和集合类型,还包括Bean之间的引用注入,这些功能大大增强了Spring框架的灵活性和扩展性,使得开发...

    Spring配置总结

    #### 三、小结 Spring配置是搭建Spring应用的基础,涵盖了日志、环境配置、编码、事务管理等多个方面。熟练掌握这些配置技巧,不仅能够提高应用的稳定性,还能提升开发效率,是每一个Spring开发者必须掌握的知识点...

    spring时间调度配置

    ### 五、小结 通过上述介绍,我们可以看到Spring提供了非常丰富的任务调度支持。无论是简单的定时任务还是复杂的作业调度需求,都可以通过Spring框架高效实现。开发者可以根据具体的应用场景选择最适合的调度方式,...

    第十二章 开发Struts 2+Spring应用.pdf

    #### 12.7 小结 通过本章的学习,你已经掌握了如何使用Struts 2和Spring框架构建复杂的Web应用程序。此外,你还学会了如何实现文件上传下载、国际化支持等功能。 #### 12.8 参考资料 - [Struts 2 官方文档]...

    看透springMvc源代码分析与实践

    前言 第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 ...22.3 小结309

Global site tag (gtag.js) - Google Analytics