id, name and BeanDefinitionName
참조 : 빈(bean)의 이름 지정
bean의 식별자를 지정하는 방법은 두 가지가 있습니다.
1. bean 태그에 id 속성에 값을 지정할 수 있습니다.
=> id 속성에는 하나의 값만 쓸 수 있습니다. 빈 공간(스페이스)이나 콤마(,) 세미콜론(;)등을 사용할 수 없습니다.
2. bean 태그에 name 속성에 값을 지정할 수 있습니다.
=> 여러개의 값을 지정할 수 있습니다. 빈 공간, 콤마, 세미콜론 등으로 구분 할 수 있습니다.
그리고 BeanDefinition 이름은 bean마다 하나씩 가지게 됩니다. 그리고 BeanDefinition 이름은 나중에 aliasing을 할 때 알아 둬야 하기 때문에 어떤 식별자가 BeanDefinition 이름이 되는지 알아둘 필요가 있습니다.
1. id와 name 모두 없는 경우
@Test public void beanDefinitionName(){
ListableBeanFactory lbf = (ListableBeanFactory)bf;
List<String> names = new ArrayList<String>();
for(String name : lbf.getBeanDefinitionNames())
names.add(name);
assertTrue(names.size() == 1);
assertTrue(names.get(0).equals("beanConfiguration.Member"));
}
=> inner bean을 사용할 때 id와 name을 모두 명시 하지 않을 수 있으며 이때 BeanDefinition 이름을 찍어보면 default로 패키지 경로가 붙은 클래스 이름으로 지정 된 것을 확인할 수 있습니다.
2. id만 있는 경우
@Test public void beanDefinitionName(){
ListableBeanFactory lbf = (ListableBeanFactory)bf;
List<String> names = new ArrayList<String>();
for(String name : lbf.getBeanDefinitionNames())
names.add(name);
assertTrue(names.size() == 1);
assertTrue(names.get(0).equals("member"));
}
=> id에 지정한 이름이 BeanDefinition 이름이 됩니다.
3. name만 있는 경우(name의 값으로 하나 만 있는 경우)
테스트는 2번과 동일하며 통과 합니다.
=> name에 지정한 이름이 BeanDefinition 이름이 됩니다.
4. name만 있는 경우(name에 값이 여러 개인 경우)
테스트는 역시 2번과 동일하며 통과 합니다.
=> name에 지정한 이름들 중에서 가장 앞에 있는 값이 BeanDefition 이름이 됩니다.
5. id와 name이 모두 있는 경우
테스트는 역시 2번과 동일하며 통과 합니다.
=> id에 지정한 값이 BeanDefinition 이름이 됩니다.
결론은 그림으로 나타내면..