2010-09-19 96 views
1

而不是我的應用程序中實例化一個PersistenceManagerFactory這樣的:如何在Spring中將屬性的HashMap傳遞給Autowired bean?

Properties properties = new Properties(); 
properties.setProperty("javax.jdo.PersistenceManagerFactoryClass", 
       "org.datanucleus.jdo.JDOPersistenceManagerFactory"); 
properties.setProperty("javax.jdo.option.ConnectionDriverName","com.mysql.jdbc.Driver"); 
properties.setProperty("javax.jdo.option.ConnectionURL","jdbc:mysql://localhost/myDB"); 
properties.setProperty("javax.jdo.option.ConnectionUserName","login"); 
properties.setProperty("javax.jdo.option.ConnectionPassword","password"); 
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(properties); 

我想在春天這樣的配置它依賴注入:

<bean id="persistenceManagerFactory" class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean" lazy-init="true"> 
    <property name="persistenceManagerFactoryName" value="transactions-optional" /> 
</bean> 

但我不知道怎麼打發在application-context.xml中的Properties(不使用jdoconfig.xml)。

是否有可能在application-context.xml通過所有這些Properties自動裝配的值?

回答

1

既可以使用內聯<props>塊斯蒂芬Ç建議的,或使用一個屬性與PropertiesPlaceHolderConfigurer文件一起的建議in the Spring Online Reference

第一寄存器中PropertyPlaceholderConfigurer:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations" 
     value="classpath:com/foo/jdbc.properties"/> 
</bean> 

或者使用新的校等效的快捷鍵:

<context:property-placeholder 
    location="classpath:com/foo/jdbc.properties"/> 

這是t的示例內容他屬性文件:

jdbc.driverClassName=org.hsqldb.jdbcDriver 
jdbc.url=jdbc:hsqldb:hsql://production:9002 
jdbc.username=sa 
jdbc.password=root 

這裏是你如何分配的屬性:

<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> 

例子從Spring參考服用。這種方法的好處在於:a)可以爲不同的應用程序上下文重複使用相同的屬性文件,b)對於單元測試,只需在類路徑中放入不同版本的屬性(在src/test /資源而不是src/main/resources),你不需要改變其他任何東西。

您也可以直接與屬性文件配置LocalPersistenceManagerFactoryBean(見PersistenceManagerFactory setup):

<beans> 

    <bean id="myPmf" class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean"> 
    <property name="configLocation" value="classpath:kodo.properties"/> 
    </bean> 

</beans> 
3

執行此操作的簡單方法是使用<props>元素來指定Properties對象及其條目。這在Spring參考手冊的Section 3.4.2.4中有描述。

對於更復雜的用例還有其他的選擇;例如有一個屬性工廠類可以從多個來源組裝一個Properties對象。

相關問題