Spring的框架中爲您提供了一個 BeanFactoryPostProcessor 的實做類別: org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。藉由這個類別,您能夠將一些組態設定,移出至.properties檔案中,如此的安排可讓XML定義檔負責系統相關設定,而.properties檔能夠做爲客戶根據需求,自定義一些相關的參數。
來看一個Bean定義檔的實際例子:
beans-config.xmlweb
Xml代碼 :spring
<?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.propertiessql
onlyfun.caterpillar.helloWord=Welcome!
在helloBean的helloWord屬性中,${onlyfun.caterpillar.helloWord}將會被hello.properties的helloWord所取代。
若是有多個.properties檔案,則能夠透過locations屬性來設定,例如:
beans-config.xml數據庫
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>
PropertyPlaceholderConfigurer類就是bean factory post-processor的一種,它的做用是一個資源屬性的配置器,可以將BeanFactory的裏定義的內容放在一個以.propertis後綴的文件中。
例如---spring-context.xml----工具
Xml代碼 :post
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>/WEB-INF/jdbc.properties</value> </list> </property> </bean>
</bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"><value>${driver}</value></property> <property name="url"><value>jdbc:${dbname}</value></property> </bean>
而實際的jdbc.propertis文件是
url
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root
而jdbc.propertis是怎樣引用的呢: 將上邊一段配置註冊在web.xml中就能夠了spa
Xml代碼 :code
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-context.xml</param-value> </context-param> 固然,不要忘了spring的監聽器註冊 <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
這樣,一個簡單的數據源就設置完畢了。 實際上,PropertyPlaceholderConfigurer起的做用就是將佔位符指向的數據庫配置信息放在bean中定義 的工具。