在 Spring ,我想动态地在列表属性中注入(inject)值。可能吗?
例如是否存在某些属性可以根据某个值多次重复该值,而不是指定三次值 1。
<bean id='myBean' class-"com.foo.Xyz">
<property name="myList">
<value>1</value>
<value>1</value>
<value>1</value>
</property>
</bean>
如果问题不清楚,请告诉我。
最佳答案
自定义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>
请注意,计数和要重复的对象都是可声明配置的。
关于java - 在 spring 中动态注入(inject)列表属性中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7349289/