The PropertyPlaceholderConfigurer is used to externalize property values from a BeanFactory definition, into another separate file in the standard Java Properties format.
========Spring Config snippet==================
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:com/foo/jdbc.properties</value>
</property>
</bean>
<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
<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>
=========================================
Alternatively, you can also config the "placeholderconfigurer" like this. Pay attention: the bean acutally is never referenced by somebody, it's there, and it works.
<bean id="placeholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="searchSystemEnvironment" value="true"/>
<property name="location" value="classpath:application.properties"/>
</bean>
=========================================
The actual values come from another file in the standard Java Properties format:
jdbc.driverClassName=org.hsqldb.jdbcDriver jdbc.url=jdbc:hsqldb:hsql://production:9002 jdbc.username=sa jdbc.password=root |
=========================================
As ablove, as long as you've configged the PropertyPlaceholderconfigurer bean, you can just use ${**} variables, configed in the jdbc.properties.
The PropertyPlaceholderConfigurer doesn't only look for properties in the Properties file you specify, but also checks against the Java System properties if it cannot find a property you are trying to use. This behavior can be customized by setting the systemPropertiesMode property of the configurer.
=======================================
Another thing to elaborate:
1) ApplicationContext -- no need for manual call.
2) BeanFactory -- you need to call propertyPlaceholderConfigurer.postProcessBeanFactory(factory); to make it work. Please refer to: http://www.cublog.cn/u/9295/showart_261437.html