簡體   English   中英

如何在Spring中將屬性的HashMap傳遞給Autowired bean?

[英]How to pass a HashMap of properties to an Autowired bean in Spring?

而不是像我這樣在我的應用程序中實例化PersistenceManagerFactory

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

我想在Spring中為它配置依賴注入,如下所示:

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

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

對於更復雜的用例,還有其他替代方案; 例如,有一個屬性工廠類可以從多個源組裝一個Properties對象。

可以像Stephen C建議的那樣使用內聯<props>塊,也可以像Spring在線參考中所建議的那樣使用屬性文件和PropertiesPlaceHolderConfigurer

首先注冊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"/>

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

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 Reference。 這種方法的好處在於:a)你可以為不同的應用程序上下文重用相同的屬性文件,b)對於單元測試,你只需在類路徑上放置不同版本的屬性(在src / test /中的maven場景中)資源而不是src / main / resources)並且您不必更改任何其他內容。

您還可以使用屬性文件直接配置LocalPersistenceManagerFactoryBean(請參閱PersistenceManagerFactory設置 ):

<beans>

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

</beans>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM