Spring Collection合并是我第一次遇到的功能,它是对StackOverflow 问题的回答
这是一种创建基本集合(列表,集合,地图或属性)并在其他Bean中修改此基本集合的方法,下面通过一个示例对此进行最好的解释-
考虑一个Person类,其字段包含一个地址列表:
public class Person {private List<Address> addresses;
..
}
假设所有Person实例都有一组公共地址,可以使用抽象的person Bean通过以下方式指定这些地址:
<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>
现在,可以使用“集合合并”功能以这种方式指定除basePerson的地址外还具有地址的Person Bean实例–请注意list的'merge = true'属性:
<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代码直接处理合并,例如,上述xml bean配置的等效@Configuration:
@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'));}@Beanpublic Person person1(){Person person1 = new Person();person1.setAddresses(baseAddresses());person1.getAddresses().add(new Address('Street4', 'State4', '004'));return person1;}
}
参考: Spring Collection由我们的JCG合作伙伴 Biju Kunjummen在all和其他博客中合并 。
翻译自: https://www.javacodegeeks.com/2012/10/spring-collection-merging.html