Это способ создания базовой коллекции (списка, набора, карты или свойств) и изменения этой базовой коллекции в других bean-компонентах, лучше всего объяснить на примере —
Рассмотрим класс Person с полем, содержащим список адресов:
1
2
3
4
|
public class Person { private List<Address> addresses; .. } |
Предположим, что все экземпляры Person имеют общий набор адресов, который можно указать с помощью абстрактного bean-компонента следующим образом:
1
2
3
4
5
6
7
8
9
|
< bean name = 'basePerson' class = 'Person' abstract = 'true' > < property name = 'addresses' > < list > < bean class = 'Address' p:street = 'Street1' p:state = 'State1' p:zip = '001' ></ bean > < bean class = 'Address' p:street = 'Street2' p:state = 'State2' p:zip = '002' ></ bean > < bean class = 'Address' p:street = 'Street3' p:state = 'State3' p:zip = '003' ></ bean > </ list > </ property > </ bean > |
Теперь экземпляры bean-объектов Person с адресами в дополнение к адресам из basePerson могут быть заданы с помощью функции слияния коллекций следующим образом — обратите внимание на атрибут списка «слияние»:
1
2
3
4
5
6
7
|
< bean name = 'person1' class = 'Person' parent = 'basePerson' > < property name = 'addresses' > < list merge = 'true' > < bean class = 'Address' p:street = 'Street4' p:state = 'State4' p:zip = '004' ></ bean > </ list > </ property > </ bean > |
Объединение коллекций также работает с <set />, <map /> и <props />
В Spring 3.1 и выше, более простой вариант может заключаться в простом использовании параметров @Configuraion и @Bean, так как тогда слияние может быть напрямую обработано с помощью кода Java, например, для эквивалентной конфигурации @Configuration для вышеупомянутой конфигурации bean-компонента xml:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
@Configuration public class CollectionConfig{ private List<Address> baseAddresses(){ return Lists.newArrayList( new Address( 'Street1' , 'State1' , '001' ), new Address( 'Street2' , 'State2' , '002' ), new Address( 'Street3' , 'State3' , '003' )); } @Bean public Person person1(){ Person person1 = new Person(); person1.setAddresses(baseAddresses()); person1.getAddresses().add( new Address( 'Street4' , 'State4' , '004' )); return person1; } } |
Ссылка: Spring Collection Слияние с нашим партнером JCG Биджу Кунджумменом в блоге all and sundry.