猿问

如何在Spring中定义List bean?

如何在Spring中定义List bean?

我正在使用Spring在我的应用程序中定义阶段。它被配置为必要的类(这里称为Configurator)注入阶段。
现在我需要另一个名为的阶段列表LoginBean。在Configurator不提供访问其阶段的名单。

我不能改变班级Configurator

我的想法:
定义一个名为Stages的新bean并将其注入ConfiguratorLoginBean。我的这个想法的问题是我不知道如何转换这个属性:

<property ...>
  <list>
    <bean ... >...</bean>
    <bean ... >...</bean>
    <bean ... >...</bean>
  </list></property>

成豆。

这样的东西不起作用:

<bean id="stages" class="java.util.ArrayList">

任何人都可以帮我吗?


心有法竹
浏览 2125回答 3
3回答

HUWWW

这是一种方法:<bean&nbsp;id="stage1"&nbsp;class="Stageclass"/><bean&nbsp;id="stage2"&nbsp;class="Stageclass"/><bean&nbsp;id="stages"&nbsp;class="java.util.ArrayList"> &nbsp;&nbsp;&nbsp;&nbsp;<constructor-arg> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<list> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<ref&nbsp;bean="stage1"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<ref&nbsp;bean="stage2"&nbsp;/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</list> &nbsp;&nbsp;&nbsp;&nbsp;</constructor-arg></bean>

Cats萌萌

另一种选择是使用JavaConfig。假设所有阶段都已注册为spring beans,您只需:@Autowiredprivate&nbsp;List<Stage>&nbsp;stages;和spring会自动将它们注入此列表中。如果您需要保留订单(上层解决方案不这样做),您可以这样做:@Configurationpublic&nbsp;class&nbsp;MyConfiguration&nbsp;{ &nbsp;&nbsp;@Autowired &nbsp;&nbsp;private&nbsp;Stage1&nbsp;stage1; &nbsp;&nbsp;@Autowired &nbsp;&nbsp;private&nbsp;Stage2&nbsp;stage2; &nbsp;&nbsp;@Bean &nbsp;&nbsp;public&nbsp;List<Stage>&nbsp;stages()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Lists.newArrayList(stage1,&nbsp;stage2); &nbsp;&nbsp;}}保留顺序的另一个解决方案是@Order在bean上使用注释。然后列表将包含按升序注释值排序的bean。@Bean@Order(1)public&nbsp;Stage&nbsp;stage1()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Stage1();}@Bean@Order(2)public&nbsp;Stage&nbsp;stage2()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Stage2();}
随时随地看视频慕课网APP

相关分类

Java
我要回答