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


<!-- 数据源定义,使用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文件中找到相应的替换。



不同于PropertyPlaceholderConfigurer 替换context文件中的变量,PropertyOverrideConfigurer是在ApplicationContext 初始化的最后,强行将某些Bean的某些属性,替换成它的properties文件里的值。

    比如生产环境的jdbc.properties里定义了jdbc连接为Oracle,并通过PlaceholderConfigurer设置到<bean id="dataSource"> 里,在测试时再载入下面的applicationContex-test.xml文件,就能透明的将配置更改为嵌入式数据库。

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。