在進行資料來源或郵件伺服器等資源的配置時,使用者可以直接在spring設定檔中配置使用者名稱/密碼,串連地址等資訊.
但更好的一種做法是將這些配置資訊獨立到一個外部屬性檔案中,並在spring設定檔中通過形如:${user},${password}
等預留位置引用屬性檔案中的屬性項,這種配置方式擁有兩個明顯的好處:
1. 減少維護工作量:資源的配置資訊可以被多個應用共用,在多個應用使用同一資源的情況下,如果資源使用者名稱/密碼,串連
地址等配置資訊發生更改時,使用者只要調整獨立的屬性檔案就可以了.
2. 使部署更簡單:spring設定檔主要描述應用程式中的Bean,這些配置資訊在開發完成後就基本固定下來.但資料來源,郵件
伺服器等資源配置資訊卻需要在部署時設定,如果通過一個獨立的屬性檔案存放這些配置資訊,應用部署人員只需要調整這個
屬性檔案即可,根本不需要關注結構複雜,內容資訊量大的spring設定檔.不僅給部署和維護帶來了方便,也降低了出錯幾率.
spring為我們提供了一個PropertyPlaceholderConfigurer,它能夠使Bean在配置時引用外部屬性檔案.
PropertyPlaceholderConfigurer實現了BeanFactoryPostProcessorBean介面,因此也是一個Bean工廠後處理器.
---------
使用外部屬性檔案
一般情況下,在定義諸如資料來源或郵件伺服器之類的配置資訊時才使用到外部屬性檔案.但在這裡,我們只是為了講解這一功能
的具體用法,因此繼續使用以前的例子,使用一個car.properties的外部屬性檔案對Car進行配置,該屬性檔案的內容如下:
brand=紅旗CA72
maxSpeed=250
price=200000.00
將car.properties屬性檔案放置在和Car類相同的目錄下,在spring設定檔中利用PropertyPlaceholderConfigurer引入
這個設定檔,並在配置car Bean時通過預留位置引用屬性檔案中的屬性項.
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!-- 引入外部屬性檔案 -->
<value>classpath:com/baobaotao/place/car.properties</value>
</list>
</property>
<property name="fileEncoding" value="UTF-8"/>
</bean>
<bean id="car" class="com.baobaotao.place.Car">
<property name="brand" value="${brand}"/>
<property name="brand" value="${maxSpeed}"/>
<property name="brand" value="${price}"/>
</bean>
我們通過PropertyPlaceholderConfigurer這個Bean工廠後處理器引用外部屬性檔案,通過locations屬性指定屬性檔案的
位置.locations屬性的類型為Resource[],所以使用者可以在地址前指定資源類型首碼.如果需要引用多個屬性檔案,只需要添加
相應的<value>配置即可.
fileEncoding: 屬性檔案的編碼格式,spring預設使用作業系統預設編碼讀取屬性檔案,如果屬性檔案採用了特殊編碼,需要
通過該屬性顯式指定.