在Spring中,是否可以将逗号分隔的bean引用列表提供给另一个bean,理想情况下不需要任何自定义属性编辑器。此列表来自我无法控制的占位符。
例如(不起作用):
<bean id="bean1" class="java.lang.Integer />
<bean id="bean2" class="java.lang.Integer />
<bean class="customclass">
<constructor-arg><ref bean="bean1,bean2" /></constructor-arg>
</bean>
与...相同:
<bean id="bean1" class="java.lang.Integer />
<bean id="bean2" class="java.lang.Integer />
<bean class="customclass">
<constructor-arg>
<list>
<ref bean="bean1"/>
<ref bean="bean2"/>
</list>
</constructor-arg>
</bean>
答案 0 :(得分:5)
可以使用这种方法:
考虑一个包含以下条目的属性文件:
test.properties
:
beanlist1=#{{@bean1,@bean2}}
现在你可以这样做了:
<context:property-placeholder location="test.properties"/>
<bean id="bean1" class="java.lang.Integer />
<bean id="bean2" class="java.lang.Integer />
<bean class="customclass">
<constructor-arg value="${beanlist}></constructor-arg>
</bean>
这与您想要的非常接近(表示略有不同 - #{{@bean1,@bean2}}
而不是bean1,bean2
)。
另一种方法如下:
<bean class="customclass">
<constructor-arg value="#{{@bean1,@bean2}}"></constructor-arg>
</bean>
两者都使用Spring-EL表达式来表示列表。
答案 1 :(得分:0)
不是直接但是编写一个工厂bean来为你做这件事很容易。它需要将逗号分隔的字符串作为属性,将其拆分,并为每个名称返回包含ManagedList
的{{1}}。然后可以通常的方式将其注入其他bean,并以您需要的方式解析引用。