Spring逗号分隔了bean引用列表

时间:2012-09-07 22:11:01

标签: java spring

在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>

2 个答案:

答案 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,并以您需要的方式解析引用。