欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring-运行时值注入

程序员文章站 2022-10-04 23:13:21
在项目中经常使用连接数据库的配置,如下所示 每个属性都是硬编码,有时候我们希望避免硬编码,而是想让这些值在运行时候再确定。Spring提供了两种在运行时求值的方式:属性占位符和Spring表达式语言 1、属性占位符:使用${...}包装属性名称 a、引入properties文件 test.prope ......

在项目中经常使用连接数据库的配置,如下所示

<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>

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、集合操作 略