2012-02-10 18 views
22

tôi có một danh sách như sau:Làm thế nào để viết một bean mùa xuân với một hàm tạo chứa một danh sách?

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

Tôi đang tự hỏi làm thế nào để tạo một bean mùa xuân mà có xử lý là một trong những đối số của nó, tức là nó có thể làm điều này trong applicationContext.xml - Tôi có thế nào để tạo ra các hạt riêng biệt cho danh sách và mỗi xử lý (AARHandler vv) đầu tiên? Dưới đây là applicationContext.xml tôi

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

Trả lời

34

Có lẽ bạn muốn tất cả các bộ xử lý được đậu mùa xuân quá. Đây là cấu hình:

<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

Đây là câu trả lời hay nhất trong năm câu đầu tiên. :-) –

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

Tôi nghĩ rằng cách thích hợp nhất để làm điều đó là:

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

bạn có thể truy cập vào liên kết sau đây http://springindepth.com/book/index.html

+0

BEWARE: Liên kết đưa tôi đến một số trang web rep.playzonenow.com với nút để kiểm tra phiếu mua hàng - không đi vào liên kết đó. – conapart3

5

Nếu bạn muốn tất cả Handlers sẵn , Spring cũng sẽ thu thập chúng cho bạn qua Autowiring:

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

Bây giờ, Spring sẽ đưa vào Danh sách tất cả các Trình xử lý có sẵn.

Xem Spring Reference 4.9.2: @Autowired

Các vấn đề liên quan