在spring中动态地注入list属性中的值

时间:2011-09-08 14:02:02

标签: java spring

在Spring中,我想动态地在list属性中注入值。有可能吗?

例如而不是指定值3三次,是否存在一些属性可以根据某个值多次重复此值。

<bean id='myBean' class-"com.foo.Xyz">
 <property name="myList">
    <value>1</value>
    <value>1</value>
    <value>1</value>
 </property>
</bean>

如果问题不明确,请告诉我。

1 个答案:

答案 0 :(得分:2)

自定义FactoryBean怎么样?

public class RepeatingListFactoryBean implements FactoryBean<Object> {

    private final Object item;
    private final int count;

    public RepeatingListFactoryBean(Object item, int count) {
        this.item = item;
        this.count = count;
    }

    @Override
    public Object getObject() throws Exception
    {
        final ArrayList<Object> list = new ArrayList<Object>(count);
        for(int i = 0; i < count; ++i)
            list.add(item);
        return list;
    }

    @Override
    public Class<?> getObjectType() {
        return item.getClass();
    }

    @Override
    public boolean isSingleton() {
        return true;
    }
}

您可以通过以下方式使用它(但我尚未对其进行测试):

<bean id="listFactory" class="RepeatingListFactoryBean">
  <constructor-arg value="1"/>  <!-- item -->
  <constructor-arg value="3"/>  <!-- count -->
</bean>

<bean id="myBean" class-"com.foo.Xyz">
  <property name="myList" ref="listFactory"/>
</bean>

请注意,count和要重复的对象都是可声明配置的。