0

我可以从多个属性文件创建具有多个属性的类的多个实例吗?

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

现在我想为 abc 和 pqr 的不同值创建多个 bean

abc 和 pqr 的一个值的一个 xyz 实例 abc 和 pqr 的另一个值的第二个 xyz 实例

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

4

2 回答 2

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>实例变量的“容器”bean。这将包含您的所有 MyObject 实例:

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

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

于 2012-09-10T21:56:56.887 回答
0

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

于 2012-09-10T18:44:37.560 回答