ITEEDU

Spring Gossip: PropertyPlaceholderConfigurer

Spring的框架中为您提供了一个 BeanFactoryPostProcessor 的实作类别: org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。藉 由这个类别,您可以将一些组态设定,移出至.properties档案中,如此的安排可以让XML定义文件负责系统相关设定,而.properties檔可 以作为客户根据需求,自定义一些相关的参数。

来看一个Bean定义档的实际例子:
beans-config.xml
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>hello.properties</value>
</property>
</bean>

<bean id="helloBean" class="onlyfun.caterpillar.HelloBean">
<property name="helloWord">
<value>${onlyfun.caterpillar.helloWord}</value>
</property>
</bean>
</beans>

假设在helloBean中有许多依赖注入的属性,这些都是比较不常变动的属性,而其中helloWord会经常变动,可以透过hello.properties来简单的设定,而这个信息已设定在configBean的location属性中:
hello.properties
onlyfun.caterpillar.helloWord=Welcome!

在helloBean的helloWord属性中,${onlyfun.caterpillar.helloWord}将会被hello.properties的helloWord所取代。

如果有多个.properties档案,则可以透过locations属性来设定,例如:
beans-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>hello.properties</value>
				<value>welcome.properties</value>
				<value>other.properties</value>
			</list>
		</property>
	</bean>
	<bean id="helloBean" class="onlyfun.caterpillar.HelloBean">
		<property name="helloWord">
			<value>${onlyfun.caterpillar.helloWord}</value>
		</property>
		...
	</bean>
</beans>