在Spring应用程序上下文文件中定义列表

时间:2011-10-04 18:33:41

标签: java spring

您可以在不使用<list>元素的情况下在Spring application-context.xml文件中创建List吗?

我有一个bean,其构造函数采用Collection对象,我想通过“value”属性传递整个列表。原因是此值来自.properties文件,您无法在.properties文件中定义列表。

我想做这样的事情......有可能吗?

MyClass.java:

public class MyClass{
  public MyClass(Collection<String> collection){ /* ... */ }
}

应用context.xml中:

<bean name="myBean" class="com.company.MyClass">
  <constructor-arg value="${the.value}" />
</bean>

.properties文件:

the.value=item1,item2,item3

感谢。

4 个答案:

答案 0 :(得分:10)

<bean name="myBean" class="com.company.MyClass">
  <constructor-arg>
    <bean class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToSet">
        <constructor-arg type="java.lang.String" value="${the.value}"/>
    </bean>
  </constructor-arg>
</bean>

答案 1 :(得分:3)

问题的一个可能解决方案是将单个字符串传递给构造函数,然后使用String.split()解析构造函数中的列表。

答案 2 :(得分:2)

我不相信,但你可以有一个构造函数从字符串构建列表。

(实际上,并不完全确定我是对的 - 您可能会使用自定义占位符配置器来玩重要游戏,不管您

答案 3 :(得分:1)

这很有效。 您可以使用SPEL。

在bean配置中,

<property name="collection" value="#{{'item1','item2','item3'}}"/>