次のようなリストがあります。
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>
おそらく、これらのハンドラーもすべて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" />
利用可能なすべてのハンドラが必要な場合、SpringはAutowiringを介してそれらを収集します。
public DiameterClient(@Autowired List<DiameterMessageHandler> handlers){
this.handlers = handlers;
}
これで、Springは使用可能なすべてのハンドラーのリストを挿入します。
そのための最も適切な方法は次のとおりです。
<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
<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>
<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"/>