spring-运行时值注入
在项目中经常使用连接数据库的配置,如下所示
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@db.dev.cc.cmbc.com.cn:1521:testDb" />
<property name="username" value="testDbUser" />
<property name="password" value="123456" />
</bean>
每个属性都是硬编码,有时候我们希望避免硬编码,而是想让这些值在运行时候再确定。Spring提供了两种在运行时求值的方式:属性占位符和Spring表达式语言
1、属性占位符:使用${...}包装属性名称
a、引入properties文件
<context:property-placeholder location="test.properties"></context:property-placeholder>
test.properties文件内容
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@db.dev.cc.cmbc.com.cn:1521:testDb
jdbc.username=testDbUser
jdbc.password=123456
b、避免硬编码的配置:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
也可以通过注解的方式避免硬编码:
package com.cn.pojo; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component
public class JdbcUtil { @Value("jdbc.driver")
private String driver;
@Value("jdbc.url")
private String url;
@Value("jdbc.username")
private String username;
@Value("jdbc.password")
private String password; //...
}
2、Spring表达式:使用#{...}包含SpEL表达式
a、使用bean的ID引用bean
#{person1}
b、调用方法和访问对象的属性
#{person1.age}
#{persion1.getName()} 对于bean方法的方法返回值,也可以调用方法 #{person1.getCar().getCarName()} ,如果person1.getCar()返回为null,则会抛出空指针异常,Spring提供了类型安全的运算符"?.", #{persion1.getCar()?.getCarName()} 如果person.getCar()不为空,则调用getCarName()获取返回值,否则,返回null
#{T(java.lang.Math).PI} 在表达式中使用类型调用静态属性和方法,必须使用T()运算符
#{T(java.lang.Math).random()}
c、对值进行算术、关系、逻辑运算
#{2*T(java.lang.Math).PI*26}
#{person1.getAge()==90}
#{person1.getAge()>90?"年龄大于90":"年龄小于等于90"} 三元运算通常用于判null
#{person.getName()+"DY"} 当“+”运算符的操作数有字符串时,执行的是连接操作
d、集合操作 略
spring-运行时值注入的更多相关文章
- Spring入门(九):运行时值注入
Spring提供了2种方式在运行时注入值: 属性占位符(Property placeholder) Spring表达式语言(SpEL) 1. 属性占位符 1.1 注入外部的值 1.1.1 使用Envi ...
- spring in action小结3 运行时值注入
讨论依赖注入的时候,通常讨论的是一个bean引用注入到另一个bean的属性或者构造器参数中.bean装配的另一个方面是将值注入到bean的属性或者构造器参数中.避免硬编码的方式就是运行时确定值. sp ...
- Spring实战(八)bean装配的运行时值注入——属性占位符和SpEL
前面涉及到依赖注入,我们一般哦都是将一个bean引用注入到另一个bean 的属性or构造器参数or Setter参数,即将为一个对象与另一个对象进行关联. bean装配的另一个方面是指将一个值注入到b ...
- Spring 高级依赖注入方式
1.处理自动装配的歧义性 1.1 标记首选的bean 使用@Primary 来说明一个bean是首选的. @Component @Primary public class GuoRongCD im ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-007-给BEAN运行时注入值placeholder、@Value
一.用placeholder给bean运行时注入值的步骤 Spring取得placeholder的值是用${...} 1.声明placeholder bean (1)java方式 In order t ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-006-给bean运行时注入值(Environment,Property文件)
一. 直观的给bean注入值如下: @Bean public CompactDisc sgtPeppers() { return new BlankDisc( "Sgt. Pepper's ...
- Spring的依赖注入(DI)三种方式
Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter方法注入 3. 构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的. 首先我们需要以下几个 ...
- spring的依赖注入是什么意思
最近学习spring框架,对依赖注入有些模糊,遂上网翻阅资料,做了下列总结,原博客为CSDN 南夏的 spring的依赖注入是什么意思,侵删! Spring 能有效地组织J2EE应用各层的对象.不管是 ...
- SpringBoot系列: 理解 Spring 的依赖注入(二)
==============================Spring 容器中 Bean 的名称==============================声明 bean 有两个方式, 一个是 @B ...
- Spring.NET依赖注入框架学习--实例化容器常用方法
Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResour ...
随机推荐
- access与excel
我们承认,Excel是伟大的,但却又不得不承认,Excel不是万能的,它至少在"多数据表关联"."数据处理自动化"."大量数据的处理"等方面 ...
- 视觉库—OpenCV
视频会议软件的视频质量除了与外置设备.编码器相关外,还与视频的后处理技术相关,视频图像通过后处理技术,如图像增强.图像去噪等,图像质量会得到主观上较大的提高.而我们通常的视频后处理技术会采用开源的项目 ...
- 我是一只IT小小鸟读书笔记3
Part6: 一. 无论在什么时候,师兄师姐都是我们最好的资源,遇到不会的问题一定要及时向他们请教,善于利用身边的人脉关系也是一个基本的技能. 二. 爱好很多,但特长一定要有.仔细思考一下 ...
- js原形对象
function clock(hour,minute,second){ this.constructor = clock ;//默认实现 /**/ } clock.prototype={ constr ...
- jvm 的性能调优
一个描述的比较生动的博客:JVM内存区域划分Eden Space.Survivor Space.Tenured Gen,Perm Gen解释 地址:https://www.cnblogs.com/sg ...
- Oracle DG 三种模式(转)
DG有下面三种模式– Maximum protection– Maximum availability– Maximum performance 在Maximum protection下, 可以保证从 ...
- springMvc-入参对象
1.修改或者添加对象 2.多添件查询时候也会遇到 springMvc能够根据属性自动的封装pojo的对象并且支持关联的对象:大致的原理是在传入后台的时候把前台的属性和对象封装成json的形式传入后台, ...
- python25 python的三目运算符
其他语言的三目运算符大类似: 条件 ? 条件为真返回值: 条件为假返回值 python不一样: 条件为真的返回值 if 条件 else 条件为假的返回值 或者 ...
- What is a Thread?
https://computing.llnl.gov/tutorials/pthreads/ Technically, a thread is defined as an independent st ...
- 【转】scp命令详解
先说下常用的情况: 两台机器IP分别为:A.104.238.161.75,B.43.224.34.73. 在A服务器上操作,将B服务器上/home/lk/目录下所有的文件全部复制到本地的/root目录 ...