web-dev-qa-db-ja.com

Spring Beanコンテキストでのオブジェクトの配列の宣言

Springコンテキストファイルにオブジェクトの配列を作成して、次のように宣言されたコンストラクターにオブジェクトの配列を注入できるようにしています。

public RandomGeocodingService(GeocodingService... services) { }

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

これを行う方法に関するドキュメントで例や何かを見つけることができませんでした。また、あなたが私がやろうとしていることを達成するためのより良い方法についての提案があります、私に知らせてください:)。

20
Alex Ciminian

これは、<array>などのものがなく、<list>しかないためです。

良い知らせは、Springは必要に応じてリストと配列の間で自動変換するため、配列を<list>として定義し、Springがそれを配列に強制変換することです。

これはうまくいくはずです:

<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は、必要に応じて、単一のBeanをリストに強制します。

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

Springは自動的にリストを配列に変換できます[]

チェックしてください 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

til schema を確認してください。

4
earldouglas

最良の回答をしたユーザーが言う理由を知りたい...

"それは<array>などがないためです。<list>しかないためです。"

現在、オブジェクトの配列をBeanに挿入するために<array>タグを使用しています。

次のコードを見てください...

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