我想知道是否可以在Spring中的列表中指定相同bean的x数量。例如,不要使用带有id的bean:stage1,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>
提前致谢。
答案 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实例。