2012-02-10 10 views
22

मैं इस प्रकार एक सूची है:एक कंस्ट्रक्टर के साथ एक वसंत बीन कैसे लिखना है जिसमें एक सूची है?

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()); 

मैं सोच रहा हूँ एक वसंत सेम कि अपने तर्कों में से एक के रूप में संचालकों लेता है कैसे बनाना है, यानी यह applicationContext.xml में ऐसा करना संभव है - मैं है सूची के लिए अलग सेम बनाने के लिए और प्रत्येक हैंडलर (AARHandler आदि) पहले बनाने के लिए? यहाँ मेरी 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> 

उत्तर

34

शायद आप इन सभी संचालकों वसंत सेम भी चाहते हैं।

<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" /> 
+1

यह पहले पांच का सबसे अच्छा जवाब है। :-) –

1
<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"/> 
2
<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> 
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

+0

सावधानी: लिंक मुझे कुछ rep.playzonenow.com साइट पर ले जाने के लिए बटन के साथ ले गया - उस लिंक में न जाएं। – conapart3

5

यात्रा कर सकते हैं आप सभी उपलब्ध हैंडलर चाहते हैं यह विन्यास है , वसंत उन्हें ऑटोवॉयरिंग के माध्यम से भी आपके लिए एकत्र करेगा:

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

अब वसंत सभी उपलब्ध हैंडलरों की एक सूची इंजेक्ट करेगा।

देखें Spring Reference 4.9.2: @Autowired

संबंधित मुद्दे