복잡한 Alias
<bean id="혜인" name="이쁘니" class="beanConfiguration.Member"/>
<alias name="이쁘니" alias="효도르" />
<alias name="이쁘니" alias="지름쟁이" />
이 전 글에 이어서.. 이 상태에서 왠지 "지름쟁이"와 "효도르"로 얻어낸 bean은 "이쁘니"로 얻어낸 bean과 같을 것 같았는데... 다르네요.
Member bean2 = (Member) bf.getBean("이쁘니");
Member alias1 = (Member) bf.getBean("효도르");
Member alias2 = (Member) bf.getBean("지름쟁이");
assertFalse(bean2.equals(alias1));
assertFalse(bean2.equals(alias2));
하지만 getAlias("효도르") 나 getAlias("지름쟁이")를 호출하게 되면 String 배열에는 "이쁘니"가 포함되어 있습니다. -_-;; 오.. 점점 혼란스러워 지는 군요.
"효도르"와 "지름쟁이"는 "이쁘니"의 Alias는 맞는데 "이쁘니"와 같은 객체는 아닙니다.
이렇게.. 복잡한 상황이 발 생할 수 있기 땜시..BeanDefinition 이름으로 alias를 설정해 주어야 합니다.
<bean id="혜인" name="이쁘니" class="beanConfiguration.Member"/>
<alias name="혜인" alias="착한 아이" />
<alias name="혜인" alias="얌전한 아이" />
String[] aliases = bf.getAliases("혜인");
assertTrue(aliases.length == 3);
Member bean1 = (Member) bf.getBean("혜인");
Member bean2 = (Member) bf.getBean("이쁘니");
Member alias1 = (Member) bf.getBean("착한 아이");
Member alias2 = (Member) bf.getBean("얌전한 아이");
assertTrue(bean1.equals(bean2));
assertTrue(bean1.equals(alias1));
assertTrue(bean1.equals(alias2));
assertTrue(alias1.equals(alias2));
}
테스트는통과 합니다. 혜인이는 이쁘니, 착한 아이, 조용한 아이로 불러온 bean과 동일합니다.
String[] getAlias(String name) 이 메소드는 name에 혜인, 이쁘니, 착한 아이, 얌전한 아이를 넣으면 모두 자기 자신을 제외한 alias 3개씩을 가지게 됩니다.
"이쁘니", "착한 아이", "얌전한 아이"는 "혜인"의 alias이면서 "혜인"과 같은 객체입니다.