我可以使用多个属性文件中的多个属性创建类的多重实例吗?
<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吗?如果是,怎么做?
答案 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。