Java 在spring中动态地在列表属性中注入值
在spring中,我想在list属性中动态注入值。可能吗 例如,不需要三次指定值1,是否存在可以基于某个值多次重复该值的属性Java 在spring中动态地在列表属性中注入值,java,spring,Java,Spring,在spring中,我想在list属性中动态注入值。可能吗 例如,不需要三次指定值1,是否存在可以基于某个值多次重复该值的属性 <bean id='myBean' class-"com.foo.Xyz"> <property name="myList"> <value>1</value> <value>1</value> <value>1</value> </prope
<bean id='myBean' class-"com.foo.Xyz">
<property name="myList">
<value>1</value>
<value>1</value>
<value>1</value>
</property>
</bean>
1.
1.
1.
如果问题不清楚,请告诉我。定制
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;
}
}
公共类RepeatingListFactoryBean实现FactoryBean{
私人最终目的项目;
私人最终整数计数;
公共RepeatingListFactoryBean(对象项,整数计数){
this.item=项目;
this.count=计数;
}
@凌驾
公共对象getObject()引发异常
{
最终ArrayList=新ArrayList(计数);
对于(int i=0;i
您可以按以下方式使用它(但我尚未测试):
请注意,count和要重复的对象都是声明式可配置的。我想这在SpEL中可能是可行的,但这看起来是一个奇怪的要求。如果可以,我认为这是一个坏主意。听起来您可能会将应用程序的一些逻辑放入Spring配置中,但它实际上应该只处理将应用程序的组件连接在一起的问题。实际上,我有一个C类,它实现了
Runnable
。它有自己的依赖项,所以我使用spring来获取这个类的完整构造实例。现在我想在线程池中安排“X”个这样的线程(java.util.concurrent.ScheduledThreadPoolExecutor
)。现在,我在for循环中使用appContext.getBean('c')
并对其进行调度,但它需要访问app context,我认为这不是一个好的做法。所以我在想,如果我能从spring本身获得这样的实例列表。想不出任何其他方法。谢谢Tomasz,但在列表中多次添加相同的项不会引用同一个实例吗?我希望在这个列表中有不同的item类实例。您提到您知道getBean()
是如何工作的-只需将BeanFactory
注入RepeatingListFactoryBean
并将beanName
而不是具体的bean传递给构造函数。最后-在每次迭代中调用getBean()
,您就完成了。谢谢。为此,如果我是对的,我必须让它实现BeanFactoryAware
。但是它是否比实现ApplicationContextAware
更好?是的,使用BeanFactoryAware
——您需要的最小接口。这使您的代码更加健壮和灵活。
<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>