<!-- 屬性文件讀入 -->
 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
   <list>
    <value>classpath*:config/jdbc.properties</value>
   </list>
  </property>
 </bean>


<!-- 數(shù)據(jù)源定義,使用Apache DBCP 連接池 -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
 </bean>


PropertyPlaceholderConfigurer可以將${...}替換為指定的properties文件或system properties中的值。
${jdbc.username} 從jdbc.properties文件中找到相應(yīng)的替換。



不同于PropertyPlaceholderConfigurer 替換context文件中的變量,PropertyOverrideConfigurer是在ApplicationContext 初始化的最后,強(qiáng)行將某些Bean的某些屬性,替換成它的properties文件里的值。

    比如生產(chǎn)環(huán)境的jdbc.properties里定義了jdbc連接為Oracle,并通過PlaceholderConfigurer設(shè)置到<bean id="dataSource"> 里,在測試時(shí)再載入下面的applicationContex-test.xml文件,就能透明的將配置更改為嵌入式數(shù)據(jù)庫。

applicationContext-test.xml: 定義載入的properties。

<bean id="testPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
<property name="location" value="classpath:spring/test/jdbc.properties"/>
</bean>

spring/test/jdbc.properties: 將ApplicationContext 中id為dataSource的bean的url屬性改為使用hsqldb。