id, name and BeanDefinitionName
Spring/Chapter 3 : 2007. 3. 6. 13:50
참조 : 빈(bean)의 이름 지정
bean의 식별자를 지정하는 방법은 두 가지가 있습니다.
1. bean 태그에 id 속성에 값을 지정할 수 있습니다.
=> id 속성에는 하나의 값만 쓸 수 있습니다. 빈 공간(스페이스)이나 콤마(,) 세미콜론(;)등을 사용할 수 없습니다.
2. bean 태그에 name 속성에 값을 지정할 수 있습니다.
=> 여러개의 값을 지정할 수 있습니다. 빈 공간, 콤마, 세미콜론 등으로 구분 할 수 있습니다.

그리고 BeanDefinition 이름은 bean마다 하나씩 가지게 됩니다. 그리고 BeanDefinition 이름은 나중에 aliasing을 할 때 알아 둬야 하기 때문에 어떤 식별자가 BeanDefinition 이름이 되는지 알아둘 필요가 있습니다.
1. id와 name 모두 없는 경우
2. id만 있는 경우
3. name만 있는 경우(name의 값으로 하나 만 있는 경우)
4. name만 있는 경우(name에 값이 여러 개인 경우)
5. id와 name이 모두 있는 경우
결론은 그림으로 나타내면..

bean의 식별자를 지정하는 방법은 두 가지가 있습니다.
1. bean 태그에 id 속성에 값을 지정할 수 있습니다.
=> id 속성에는 하나의 값만 쓸 수 있습니다. 빈 공간(스페이스)이나 콤마(,) 세미콜론(;)등을 사용할 수 없습니다.
2. bean 태그에 name 속성에 값을 지정할 수 있습니다.
=> 여러개의 값을 지정할 수 있습니다. 빈 공간, 콤마, 세미콜론 등으로 구분 할 수 있습니다.
그리고 BeanDefinition 이름은 bean마다 하나씩 가지게 됩니다. 그리고 BeanDefinition 이름은 나중에 aliasing을 할 때 알아 둬야 하기 때문에 어떤 식별자가 BeanDefinition 이름이 되는지 알아둘 필요가 있습니다.
1. id와 name 모두 없는 경우
<bean class="beanConfiguration.Member" />
@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로 패키지 경로가 붙은 클래스 이름으로 지정 된 것을 확인할 수 있습니다.@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"));
}
2. id만 있는 경우
<bean id="member" class="beanConfiguration.Member" />
@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 이름이 됩니다.@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"));
}
3. name만 있는 경우(name의 값으로 하나 만 있는 경우)
<bean name="member" class="beanConfiguration.Member" />
테스트는 2번과 동일하며 통과 합니다.
=> name에 지정한 이름이 BeanDefinition 이름이 됩니다.테스트는 2번과 동일하며 통과 합니다.
4. name만 있는 경우(name에 값이 여러 개인 경우)
<bean name="member, member1, member2" class="beanConfiguration.Member" />
테스트는 역시 2번과 동일하며 통과 합니다.
=> name에 지정한 이름들 중에서 가장 앞에 있는 값이 BeanDefition 이름이 됩니다.테스트는 역시 2번과 동일하며 통과 합니다.
5. id와 name이 모두 있는 경우
<bean id="member" name="member1, member2" class="beanConfiguration.Member" />
테스트는 역시 2번과 동일하며 통과 합니다.
=> id에 지정한 값이 BeanDefinition 이름이 됩니다.테스트는 역시 2번과 동일하며 통과 합니다.
결론은 그림으로 나타내면..
'Spring > Chapter 3' 카테고리의 다른 글
idref 엘리먼트 (0) | 2007.03.08 |
---|---|
Constructor Injection 할 때 인자 구분 (0) | 2007.03.08 |
Setter Injection & Constructor Injection (0) | 2007.03.08 |
3.3. Dependencies (0) | 2007.03.08 |
Bean 생성하기 (0) | 2007.03.07 |
복잡한 Alias (0) | 2007.03.07 |
Aliasing Beans (0) | 2007.03.07 |
id, name and BeanDefinitionName (0) | 2007.03.06 |
FileSystemResource vs ClassPathResource (2) | 2007.03.06 |
3.2. Basics - containers and beans (0) | 2007.03.05 |
BeanFactory와 ApplicationContext 인터페이스 (0) | 2007.03.05 |