web-dev-qa-db-ja.com

リストを含むコンストラクタで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());

引数の1つとしてハンドラーを受け取る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>
22
Rory

おそらく、これらのハンドラーもすべて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" />
37
sinuhepop

利用可能なすべてのハンドラが必要な場合、SpringはAutowiringを介してそれらを収集します。

public DiameterClient(@Autowired List<DiameterMessageHandler> handlers){
    this.handlers = handlers;
}

これで、Springは使用可能なすべてのハンドラーのリストを挿入します。

Spring Reference 4.9.2:@Autowired

7

そのための最も適切な方法は次のとおりです。

<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>

次のリンクにアクセスできます http://springindepth.com/book/index.html

7
r366y
<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>
       <bean class="AARHandler"/>
       <bean class="CERHandler"/>
      </list>
    </constructor-arg>        
</bean>
2
Adi
    <list>
        <ref bean="handler1" />
        <ref bean="handler2" />
        <ref bean="handler3" />
        <ref bean="handler4" />
        <ref bean="handler5" />
    </list>


    <bean id="handler1" class="AARHandler"/>
    <bean id="handler2" class="CERHandler"/>
    <bean id="handler3" class="PPAHandler"/>
    <bean id="handler4" class="STRHandler"/>
    <bean id="handler5" class="DWRHandler"/>
1
Paul Whelan