Collection Merging
<list /> <set /> <map /> <props />는 parent bean - child bean의 관계에 있을 때 merge가 가능합니다. merge를 하고 싶을 때는 위 태그들의 속성 중에 merge 속성에 "true" 값을 주면 됩니다.
<bean id="keesun3" class="beanConfiguration.Member">
<property name="wishList">
<list>
<value>NDS</value>
<value>Wii</value>
<value>WOW</value>
</list>
</property>
</bean>
<property name="wishList">
<list>
<value>NDS</value>
<value>Wii</value>
<value>WOW</value>
</list>
</property>
</bean>
<bean id="keesun4" parent="keesun3" class="beanConfiguration.Member">
<property name="wishList" >
<list merge="true">
<value>MacBook</value>
<value>WOW</value>
</list>
</property>
</bean>
keesun3 이 keesun4 의 parent bean인 상태에서 <list /> merge 속성을 true를 지정했기 때문에 아래의 테스트가 통과 합니다.
@Test public void listMerging(){
Member keesun = (Member) bf.getBean("keesun4");
List<String> wishList = keesun.getWishList();
assertEquals(5, wishList.size());
assertEquals("NDS", wishList.get(0));
assertEquals("Wii", wishList.get(1));
assertEquals("WOW", wishList.get(2));
assertEquals("MacBook", wishList.get(3));
assertEquals("WOW", wishList.get(4));
}
Member keesun = (Member) bf.getBean("keesun4");
List<String> wishList = keesun.getWishList();
assertEquals(5, wishList.size());
assertEquals("NDS", wishList.get(0));
assertEquals("Wii", wishList.get(1));
assertEquals("WOW", wishList.get(2));
assertEquals("MacBook", wishList.get(3));
assertEquals("WOW", wishList.get(4));
}
chile bean의 콜렉션에 같은 요소가 있을 경우 <list /> 와는 다르게 <set /> <map /> <props /> 는 child bean의 콜렉션이 parent bean에 있는 collection을 overriding 합니다.