为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Spring中定义List bean?

如何在Spring中定义List bean?

心有法竹 2019-08-12 10:06:04
如何在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>


查看完整回答
反对 回复 2019-08-12
?
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();}


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 2178 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号