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