如何使用包含列表的构造函数编写 spring bean?

新手上路,请多包涵

我有一个列表如下:

 ArrayList<DiameterMessageHandler> handlers = new ArrayList<>();
handlers.add(new AARHandler());
handlers.add(new CERHandler());
handlers.add(new PPAHandler());
handlers.add(new STRHandler());
handlers.add(new DWRHandler());

我想知道如何创建一个将处理程序作为其参数之一的 spring bean,即是否可以在 applicationContext.xml 中执行此操作 - 我是否必须为列表和每个处理程序(AARHandler 等)创建单独的 bean第一的?这是我的 applicationContext.xml

 <bean id="DiameterClient" class="com.rory.ptspsim.diameterclient.DiameterClient" scope="singleton" init-method="start">
        <constructor-arg type="java.lang.String" index="0"><value>${pcca.host}</value></constructor-arg>
        <constructor-arg index="1">WHAT GOES HERE?</constructor-arg>
    </bean>

原文由 Rory 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 378
2 个回答

可能您希望所有这些处理程序也都是 Spring bean。这是配置:

 <bean id="DiameterClient" class="com.rory.ptspsim.diameterclient.DiameterClient" init-method="start">
    <constructor-arg value="${pcca.host}" />
    <constructor-arg>
        <list>
            <ref bean="aarHandler" />
            ...
        </list>
    </constructor-arg>
</bean>

<bean id="aarHandler" class="com.rory.ptspsim.diameterclient.AARHandler" />

原文由 sinuhepop 发布,翻译遵循 CC BY-SA 3.0 许可协议

我认为最合适的方法是:

 <bean id="DiameterClient" class="com.rory.ptspsim.diameterclient.DiameterClient"       scope="singleton" init-method="start">
    <constructor-arg type="java.lang.String" index="0"><value>${pcca.host}</value></constructor-arg>
    <constructor-arg index="1">
       <list>
           <ref bean="aarHandler" />
           <ref bean="cerHandler" />
           <ref bean="ppaHandler" />
           <ref bean="strHandler" />
           <ref bean="dwrHandler" />
       </list>
    </constructor>
</bean>

原文由 r366y 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题