Aliasing Beans
이전 글 id와 name 그리고 BeanDeinition 이름에서 bean의 유일한 식별자를 구별해 낼 수 있게 됐습니다. 유일한 식별자 이외 나머지는 모두 별칭(alias)이 됩니다.[footnote]BeanFactory에 있는 String[] getAlias(String name) 메소드를 이용해서 확인할 수 있습니다.[/footnote]
다수의 name을 사용해서 별칭을 만들수도 있지만 <alias /> 태그를 사용해서 만들 수도 있습니다. 이 때 주의해야 할 것은 별명을 진짜 대상(유일한 식별자)에다가 붙여야 한다는 것입니다.
즉..bean의 유일한 식별자 즉 BeanDefinition 이름을 alias 태그의 name 속성에 적어 두어야 합니다.
만약에 "이쁘니"라는 별명이 있는 "혜인"이가 있다고 했을 때 즉.. "혜인"이 BeanDefinition 이름이고 "이쁘니"는 alias입니다.
또는
<bean name="혜인, 이쁘니" class="keesun.lover.Hein" />
이런 식으로 지정하면 가정한 상황처럼 됩니다.
여기에 또 다시 "효도르", "지름쟁이"라는 별칭을 "이쁘니"에 다가 매겼다고 생각해 봅니다.
<alias name="혜인" alias="지름쟁이" />
그럼 이제.. "효도르"는 혜인이의 별명인가요?? 아니죠? "이쁘니"의 별명이 "효도르"일뿐 혜인이의 별명이 "효도르"는 아닙니다. alias는 추이적인 속성이 없기 때문에 절대로 혜인이는 효도르로 불려지지 않으며 더욱이 "지름쟁이"라는 별명으로 혜인이를 부르려고 해봤자 헛수고 입니다.
<alias name="이쁘니" alias="효도르" />
<alias name="이쁘니" alias="지름쟁이" />
@Test public void beanAliasing(){
String[] aliases = bf.getAliases("혜인");
assertTrue(aliases.length == 1);
assertTrue(aliases[0].equals("이쁘니"));
Member bean1 = (Member) bf.getBean("혜인");
Member bean2 = (Member) bf.getBean("이쁘니");
Member alias1 = (Member) bf.getBean("효도르");
Member alias2 = (Member) bf.getBean("지름쟁이");
assertTrue(bean1.equals(bean2));
assertFalse(bean1.equals(alias1));
assertFalse(bean1.equals(alias2));
assertTrue(alias1.equals(alias2));
}
테스트는 통과 합니다.