이전 글 id와 name 그리고 BeanDeinition 이름에서 bean의 유일한 식별자를 구별해 낼 수 있게 됐습니다. 유일한 식별자 이외 나머지는 모두 별칭(alias)이 됩니다.[footnote]BeanFactory에 있는 String[] getAlias(String name) 메소드를 이용해서 확인할 수 있습니다.[/footnote]

다수의 name을 사용해서 별칭을 만들수도 있지만 <alias /> 태그를 사용해서 만들 수도 있습니다. 이 때 주의해야 할 것은 별명을 진짜 대상(유일한 식별자)에다가 붙여야 한다는 것입니다.

즉..bean의 유일한 식별자 즉 BeanDefinition 이름을 alias 태그의 name 속성에 적어 두어야 합니다.

사용자 삽입 이미지
만약에 "이쁘니"라는 별명이 있는 "혜인"이가 있다고 했을 때 즉.. "혜인"이 BeanDefinition 이름이고 "이쁘니"는 alias입니다.

<bean id="혜인" name="이쁘니" class="keesun.lover.Hein" />
또는
<bean name="혜인, 이쁘니" class="keesun.lover.Hein" />

이런 식으로 지정하면 가정한 상황처럼 됩니다.

여기에 또 다시 "효도르", "지름쟁이"라는 별칭을 "이쁘니"에 다가 매겼다고 생각해 봅니다.

<alias name="혜인" alias="효도르" />
<alias name="혜인" alias="지름쟁이" />

그럼 이제.. "효도르"는 혜인이의 별명인가요?? 아니죠? "이쁘니"의 별명이 "효도르"일뿐 혜인이의 별명이 "효도르"는 아닙니다. alias는 추이적인 속성이 없기 때문에 절대로 혜인이는 효도르로 불려지지 않으며 더욱이 "지름쟁이"라는 별명으로 혜인이를 부르려고 해봤자 헛수고 입니다.

    <bean id="혜인" name="이쁘니" class="beanConfiguration.Member"/>
    <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));
    }

테스트는 통과 합니다.