2010-08-31 13 views
18

Estoy intentando crear una matriz de objetos en un archivo de contexto primavera para que pueda inyectar a un constructor que está declarada como esto:Declarar una matriz de objetos en un contexto de frijol de primavera

public RandomGeocodingService(GeocodingService... services) { } 

I' estoy tratando de utilizar la etiqueta <array>:

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

no he podido encontrar un ejemplo o algo en la en la documentación sobre cómo hacer esto. Además, tienes sugerencias para una mejor manera de lograr lo que estoy tratando de hacer, por favor házmelo saber :).

+1

Se puede utilizar una lista? – Zoidberg

Respuesta

30

Eso es porque no hay tal cosa como <array>, solo hay <list>.

La buena noticia es que Spring convertirá automáticamente entre listas y matrices según sea necesario, por lo que definió su matriz como <list>, y Spring la forzará en una matriz para usted.

esto debería funcionar:

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

primavera también se obligará a un solo grano en una lista, si es necesario:

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

me gustaría saber por qué el usuario que dio la mejor respuesta dice ...

"Eso es porque no hay tal cosa como <array>, solo hay <list>"

Actualmente estoy usando la etiqueta <array> para inyectar una matriz de objetos en un bean.

Echa un vistazo al siguiente código ...

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