在Spring中,我想动态地在list属性中注入值。有可能吗?
例如而不是指定值3三次,是否存在一些属性可以根据某个值多次重复此值。
<bean id='myBean' class-"com.foo.Xyz">
<property name="myList">
<value>1</value>
<value>1</value>
<value>1</value>
</property>
</bean>
如果问题不明确,请告诉我。
答案 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和要重复的对象都是可声明配置的。