使用Spring中的PropertyPlaceholderConfigurer创建具有不同值的多个类实例

时间:2012-09-10 18:26:09

标签: java spring

我可以使用多个属性文件中的多个属性创建类的多重实例吗?

<beans>
   <bean class="xyz">
       <property name="abc">${abc}</property>
     <property name="pqr">${pqr}</property>
   </bean>
<beans>

现在我想为abc和pqr

的不同值创建多个bean

一个xyz实例,用于abc和pqr的一个值 其他值为abc和pqr的第二个xyz实例

我可以使用PropertyPlaceholderConfigurer吗?如果是,怎么做?

2 个答案:

答案 0 :(得分:1)

属性文件通常不包含重复的键。因此,我假设您为每个不同的'abc''pqr'键值设置了不同的文件,即:您希望拥有一个实例/一个属性文件。如果是这样,那么您可以加载所有属性文件并创建相应的bean定义,如下所示:

<bean id="ppc1"
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location" value="classpath:/mya.properties" />
  <property name="placeholderPrefix" value="$a{" />
  <property name="placeholderSuffix" value="}" />
</bean>

<bean id="ppc2"
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location" value="classpath:/myb.properties" />
  <property name="placeholderPrefix" value="$b{" />
  <property name="placeholderSuffix" value="}" />
</bean>

<bean id="objectA" class="MyObject">
  <property name="field1" value="$a{abc}" />
  <property name="field2" value="$a{pqr}" />
</bean>

<bean id="objectB" class="MyObject">
  <property name="field1" value="$b{abc}" />
  <property name="field2" value="$b{pqr}" />
</bean>

(可选)创建一个具有List<MyObject>实例变量的'container'bean。这将保存所有MyObject实例:

<bean id="myContainerBean" class="MyContainer">
  <property name="objects">
    <list>
      <ref bean="objectA" />
      <ref bean="objectB" />
    </list>
  </property>
</bean>

如果您想到一个“动态”解决方案,那么请接受@Biju的回答。

答案 1 :(得分:0)

我无法想到任何开箱即用的东西 - 我能想到的唯一方法就是使用自定义BeanFactoryPostProcessor。 BeanFactoryPostProcessors允许您在加载应用程序上下文时添加更多bean定义,因此您可以编写一个自定义代码,根据您的属性文件注册更多bean定义,它们将在运行时显示为bean。