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