在項目中經常使用連接資料庫的配置,如下所示 每個屬性都是硬編碼,有時候我們希望避免硬編碼,而是想讓這些值在運行時候再確定。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>
也可以通過註解的方式避免硬編碼:
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、集合操作 略