Spring系列合并

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'));
 }
 
 
 @Bean
 public 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值