Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring中动态地在列表属性中注入值_Java_Spring - Fatal编程技术网

Java 在spring中动态地在列表属性中注入值

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

在spring中,我想在list属性中动态注入值。可能吗

例如,不需要三次指定值1,是否存在可以基于某个值多次重复该值的属性

<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>