頭些天弄瞭個使用properties文件初始化bean屬性的測試,在這兩天工作時正好需要將部分配置提取到properties文件中的情況,但是其中一個屬性為Map類型,上網搜瞭很久也沒搜到類似初始化Map的方法,在找到初始化Map方法前,為瞭使系統可以繼續使用,臨時使用瞭添加init方法的辦法來對Map進行手工初始化工作。如下:
首先使帶有Map屬性的類實現InitializingBean接口。
代碼片段:
[java]
public class SsoMailConfigImpl implements InitializingBean, SsoMailConfig
{
private String userDomainMapInit; // 通過properties將Map通過類似形式格式化存入userDomainMapInit 0:mail.com.cn | 1:test.com.cn
private Map<String, String> userDomainMap; //通過afterPropertiesSet()方法將userDomainMapInit數據初始化到Map中
}
然後實現InitializingBean中的afterPropertiesSet()方法
代碼:
[java]
public void afterPropertiesSet() throws Exception
{
userDomainMap = new HashMap<String, String>();
String[] userDomainArr = userDomainMapInit.split("\\|");
String[] tempKeyValue;
for (String userDomainEntry : userDomainArr)
{
tempKeyValue = userDomainEntry.split(":");
if (tempKeyValue.length == 2)
{
userDomainMap.put(tempKeyValue[0].trim(), tempKeyValue[1].trim());
}
}
}
由於默認Spring容器使用Singleton模式創建Bean所以,這個初始化隻會執行一次。這樣可以對Map屬性執行手動初始化操作。
spring配置文件代碼片段:
[html]
<bean id="propertyFileForMailConfig"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>ssomailconfig.properties</value>
</property>
</bean>
<bean id="emailConfig" class="com.neusoft.education.dcp.apps.sso.SsoMailConfigImpl">
<property name="userDomainMapInit" value='${USER_DOMAIN_MAP_INIT}' />
</bean>
我想一定還有更簡潔的方法實現properties對Map進行初始化,希望有這方面經驗的朋友給我留言或者Mail我,arvin.rong@gmail.com,謝謝啦