2010-08-31 6 views
18

Ich versuche, eine Reihe von Objekten in einer Frühlings-Kontext-Datei zu erstellen, damit ich es zu einem Konstruktor injizieren kann, die wie folgt deklariert wird:ein Array von Objekten in einem Spring-Bean Kontext Deklarieren

public RandomGeocodingService(GeocodingService... services) { } 

I‘ versuchen, den <array> Tag zu verwenden:

<bean id="googleGeocodingService" class="geocoding.GoogleGeocodingService"> 
<constructor-arg ref="proxy" /> 
<constructor-arg value="" /> 
</bean> 

<bean id="geocodingService" class="geocoding.RandomGeocodingService"> 
    <constructor-arg> 
     <array value-type="geocoding.GeocodingService"> 
      <!-- How do I reference the google geocoding service here? --> 
     </array> 
    </constructor-arg> 
</bean> 

ich habe nicht in der Lage gewesen, ein Beispiel oder etwas in dem in der Dokumentation zu finden, wie dies zu tun. Sie haben auch Vorschläge für eine bessere Art und Weise zu erreichen, was ich versuche zu tun, lass es mich wissen :).

+1

Können Sie eine Liste verwenden? – Zoidberg

Antwort

30

Das liegt daran, dass es keine <array> gibt, es gibt nur <list>.

Die gute Nachricht ist, dass Spring wird automatisch zwischen Listen und Arrays wie erforderlich konvertieren, so definiert Ihr Array als <list>, und Spring wird es in ein Array für Sie zwingen.

Dies sollte funktionieren:

<bean id="googleGeocodingService" class="geocoding.GoogleGeocodingService"> 
    <constructor-arg ref="proxy" /> 
    <constructor-arg value="" /> 
</bean> 

<bean id="geocodingService" class="geocoding.RandomGeocodingService"> 
    <constructor-arg> 
     <list> 
      <ref bean="googleGeocodingService"/> 
     </list> 
    </constructor-arg> 
</bean> 

Frühling wird auch eine einzelne Bohne in eine Liste zwingen, bei Bedarf:

<bean id="geocodingService" class="geocoding.RandomGeocodingService"> 
    <constructor-arg> 
     <ref bean="googleGeocodingService"/> 
    </constructor-arg> 
</bean> 
0

Ich mag würde wissen, warum der Benutzer, der die beste Antwort gab sagt ...

"Das ist, weil es so etwas wie <array> nicht gibt, gibt es nur <list>"

Ich verwende derzeit <array> Tag, um ein Array von Objekten in eine Bean zu injizieren.

Werfen Sie einen Blick auf den folgenden Code ...

<bean id="song1" class="mx.com.company.songs.Song"> 
     <property name="name" value="Have you ever seen the rain?"/>   
    </bean> 

    <bean id="song2" class="mx.com.company.songs.Song"> 
     <property name="name" value="La bamba"/>  
    </bean> 

    <bean id="guitarPlayer" class="mx.com.company.musician.GuitarPlayer"> 
     <property name="songs"> 
      <array> 
       <ref bean="song1"/> 
       <ref bean="song2"/> 
      </array> 
     </property> 
    </bean> 
Verwandte Themen