Это способ создания базовой коллекции (списка, набора, карты или свойств) и изменения этой базовой коллекции в других 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
|
@Configurationpublic 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.