web-dev-qa-db-fra.com

Déclaration d'un tableau d'objets dans un contexte de bean Spring

J'essaie de créer un tableau d'objets dans un fichier de contexte Spring afin de l'injecter à un constructeur déclaré comme ceci:

public RandomGeocodingService(GeocodingService... services) { }

J'essaie d'utiliser la balise <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>

Je n'ai pas été en mesure de trouver un exemple ou quelque chose dans la documentation sur la façon de procéder. Aussi, vous avez des suggestions pour une meilleure façon de réaliser ce que j'essaie de faire, s'il vous plaît faites le moi savoir :).

19
Alex Ciminian

C'est parce que <array> n'existe pas, il n'y a que <list>.

La bonne nouvelle est que Spring convertira automatiquement les listes et les tableaux selon les besoins, définissez donc votre tableau en tant que <list> et que Spring le contraindra à le transformer en tableau.

Cela devrait fonctionner:

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

Spring forcera également un seul haricot dans une liste, si nécessaire:

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

Spring peut convertir automatiquement une liste en tableau []

check it out http://forum.springsource.org/showthread.php?37767-Injecting-String-Array

<bean name="test" class="Test">
   <property name="values" value="hugo,emil"></property>
</bean>
6
wandi.darko

Découvrez le schéma util .

4
earldouglas

J'aimerais savoir pourquoi l'utilisateur qui a donné la meilleure réponse dit ... 

"C'est parce qu'il n'y a rien de tel que <array>, il n'y a que <list>"

J'utilise actuellement la balise <array> pour injecter un tableau d'objets dans un bean. 

Regardez le code suivant ...

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