Объявление массива объектов в контексте bean-компонента Spring
Я пытаюсь создать массив объектов в файле контекста 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>
Я не смог найти пример или что-то в документации о том, как это сделать. Кроме того, у вас есть предложения о том, как лучше понять, что я пытаюсь сделать, пожалуйста, дайте мне знать:).
4 ответа
Это потому, что нет такой вещи, как <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 id="geocodingService" class="geocoding.RandomGeocodingService">
<constructor-arg>
<ref bean="googleGeocodingService"/>
</constructor-arg>
</bean>
Spring может автоматически конвертировать список в массив []
проверить это http://forum.springsource.org/showthread.php?37767-Injecting-String-Array
<bean name="test" class="Test">
<property name="values" value="hugo,emil"></property>
</bean>
Я хотел бы знать, почему пользователь, который дал лучший ответ, говорит...
"Это потому, что нет такой вещи, как <array>
, есть только <list>
"
Я сейчас пользуюсь <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>