如何在Spring中定义List bean?我正在使用Spring在我的应用程序中定义阶段。它被配置为必要的类(这里称为Configurator)注入阶段。现在我需要另一个名为的阶段列表LoginBean。在Configurator不提供访问其阶段的名单。我不能改变班级Configurator。我的想法:定义一个名为Stages的新bean并将其注入Configurator和LoginBean。我的这个想法的问题是我不知道如何转换这个属性:<property ...>
<list>
<bean ... >...</bean>
<bean ... >...</bean>
<bean ... >...</bean>
</list></property>成豆。这样的东西不起作用:<bean id="stages" class="java.util.ArrayList">任何人都可以帮我吗?
3 回答
HUWWW
TA贡献1874条经验 获得超12个赞
这是一种方法:
<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>
Cats萌萌
TA贡献1805条经验 获得超9个赞
另一种选择是使用JavaConfig。假设所有阶段都已注册为spring beans,您只需:
@Autowiredprivate List<Stage> stages;
和spring会自动将它们注入此列表中。如果您需要保留订单(上层解决方案不这样做),您可以这样做:
@Configurationpublic class MyConfiguration {
@Autowired
private Stage1 stage1;
@Autowired
private Stage2 stage2;
@Bean
public List<Stage> stages() {
return Lists.newArrayList(stage1, stage2);
}}保留顺序的另一个解决方案是@Order在bean上使用注释。然后列表将包含按升序注释值排序的bean。
@Bean@Order(1)public Stage stage1() {
return new Stage1();}@Bean@Order(2)public Stage stage2() {
return new Stage2();}添加回答
举报
0/150
提交
取消
