起因
一直的用法是 @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 是一个基于 Java 的 Web 应用程序框架,提供了强大的 RequestMapping 机制来处理 HTTP 请求。在 Spring MVC 中,RequestMapping 是一个核心组件,负责...
【Spring 框架学习小结】 Spring 是一个流行的 Java 应用开发框架,它以其控制反转(Inversion of Control, IOC)和面向切面编程(Aspect-Oriented Programming, AOP)为核心特性,被誉为轻量级框架。下面将详细...
#### 五、小结 Spring框架提供了丰富的事务管理方式,使得开发者可以根据项目需求选择最适合自己的方案。通过本文的介绍,相信读者已经对Spring事务配置的五种方式有了更深入的理解。在实际开发过程中,开发者可...
本文将围绕“Spring小结之配置二级缓存”这一主题,详细阐述二级缓存的概念、作用以及如何在Spring中进行配置。 首先,二级缓存是指在应用程序中的第一级缓存(通常是数据库连接池提供的缓存)之外的另一层缓存机制...
根据提供的信息,我们可以详细探讨...### 小结 通过Spring框架结合Velocity模板引擎,可以方便地实现邮件的自动化发送。这种方式不仅可以提高邮件内容的定制化程度,还可以有效减少重复性的手工操作,提升工作效率。
在Spring 3.1版本中,引入了对缓存的支持,极大地提高了应用程序的性能和效率。这个特性使得开发者能够方便地在应用中集成缓存机制,而无需深入了解底层缓存库的实现细节。本文将围绕Spring 3.1的缓存功能进行详细...
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框架中如何配置数据源以及SessionFactory,其中涉及了DBCP和C3P0两种数据源的配置方式以及Hibernate的SessionFactory配置方法。这些配置使得开发人员能够更方便地管理和使用数据库...
#### 四、小结 通过以上步骤,我们已经成功配置了一个基于Spring和Quartz的定时任务,该任务每隔50秒会自动调用`LocalCacheRefreshServiceImpl`中的`refreshLocalCache`方法,以刷新本地缓存。这种方式不仅简单易用...
Spring Boot 中的常用注解使用小结 作为一个java开发人员,特别是使用 Spring Boot 框架的开发人员,了解常用的注解是非常重要的。本文主要总结了 Spring Boot 中的常用注解,包括 @RestController、@...
### 小结 通过对给定文件的分析,我们了解了Spring框架中XML配置的基本用法,包括如何配置`ContextLoaderListener`和`ContextLoaderServlet`,以及如何利用自动装配机制来简化依赖注入过程。这些配置对于构建基于...
#### 小结 本文介绍了Spring MVC在Spring 2.5版本中引入的基于注解的配置方式,包括使用`@Controller`、`@RequestMapping`等注解来定义Controller及其处理方法,以及如何配置DispatcherServlet等关键组件。通过使用...
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框架中各种属性注入的基本方法。这些方法不仅限于基本数据类型和集合类型,还包括Bean之间的引用注入,这些功能大大增强了Spring框架的灵活性和扩展性,使得开发...
#### 三、小结 Spring配置是搭建Spring应用的基础,涵盖了日志、环境配置、编码、事务管理等多个方面。熟练掌握这些配置技巧,不仅能够提高应用的稳定性,还能提升开发效率,是每一个Spring开发者必须掌握的知识点...
### 五、小结 通过上述介绍,我们可以看到Spring提供了非常丰富的任务调度支持。无论是简单的定时任务还是复杂的作业调度需求,都可以通过Spring框架高效实现。开发者可以根据具体的应用场景选择最适合的调度方式,...
#### 12.7 小结 通过本章的学习,你已经掌握了如何使用Struts 2和Spring框架构建复杂的Web应用程序。此外,你还学会了如何实现文件上传下载、国际化支持等功能。 #### 12.8 参考资料 - [Struts 2 官方文档]...
前言 第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 ...22.3 小结309