Spring中的多个Bean实例

时间:2012-03-27 23:31:48

标签: java spring

我想知道是否可以在Spring中的列表中指定相同bean的x数量。例如,不要使用带有id的bean:s​​tage1,stage2,... stageN,如下所示:

<bean id="stage1" class="Stageclass"/>
<bean id="stage2" class="Stageclass"/>

<bean id="stages" class="java.util.ArrayList">
    <constructor-arg>
        <list>
            <ref bean="stage1" />
            <ref bean="stage2" />                
        </list>
    </constructor-arg>
</bean>

是否可以执行以下操作?:

<bean id="stage1" class="Stageclass"/>

<bean id="stages" class="java.util.ArrayList">
    <constructor-arg>
        <list>
            <ref bean="stage1" duplicate="20 times"/>
        </list>
    </constructor-arg>
</bean>

提前致谢。

3 个答案:

答案 0 :(得分:3)

如果您使用基于注释的配置,并且您为某个类指定了具有相同接口的对象列表,那么spring将自动连接自动连接,然后免费。例如:

interface StageInterface {
    //...
}

class StageImpl1 implements StageInterface {
    //...
}

class StageImpl2 implements StageInterface {
    //...
}

@Component
class StageContainer {

    private final List<StageInterface> stages;

    @Autowired
    public StageContainer(List<StageInterface> stages) {
        this.stages = stages;
    }

    public List<StageInterface> getStages() {
        return stages;
    }
}

这是春季版3+功能。

我相信xml配置也是如此。在您的情况下,可能是同一个类(StageClass),但具有不同的配置参数。

答案 1 :(得分:2)

来自http://static.springsource.org/spring/docs/2.5.x/reference/beans.html的查找方法注入解决了这个问题。只需要确保我想要bean的多个实例有scope =“prototype”

答案 2 :(得分:1)

使用标准的Spring默认命名空间不能这样做。但是,您可以实现自己的custom namespace,以支持此类语法。

或者,您可以实现一个static method,它将创建一个包含重复元素的ArrayList实例。