4

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

2 回答 2

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 表达式来表示列表。

于 2012-09-08T19:43:06.360 回答
0

不是直接的,但编写一个工厂 bean 来为你做这件事很容易。它需要将逗号分隔的字符串作为属性,将其拆分,并为每个名称返回ManagedList包含 a 的 a 。RuntimeBeanReference然后可以以通常的方式将其注入到其他 bean 中,并且将以您需要的方式解析引用。

于 2012-09-08T15:29:58.443 回答