- 모든 bean은 ApplicationContext 내에서 고유한 하나 이상의 이름을 가져야 한다.
- <bean> 태그 내에 id 속성이 지정되어 있으면 id 속성에 지정된 값을 이름으로 사용한다.
- <bean> 태그 내에 id 속성이 없으면 name 속성을 찾아 name 속성에 지정된 제일 첫 번째 값을 사용한다.
- id와 name 모두 지정되어 있지 않으면 bean의 클래스 이름을 이름으로 사용한다.
- 만일 동일한 클래스인 bean이 여러개 선언되어 있으면 스프링은 초기화 과정에서 NoSuchBeanDefinitionException을 던진다.
- 따라서 클래스 이름이 자동으로 bean의 이름이 되는 상황은 피하는 것이 좋다.
bean 이름 지정의 예
<beans...>
<bean id="string1" class="java.lang.String" />
<bean name="string2" class="java.lang.String" />
<bean class="java.lang.String" />
<bean class="java.lang.String" />
</beans>
public class BeanNamingTest {
public static void main(String...args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:spring/app-context-01.xml");
ctx.refresh();
Map<String, String> beans = ctx.getBeanOfType(String.class);
beans.entrySet().stream().forEach(b -> System.out.println(b.getKey()));
}
}
/*
출력
string1
string2
java.lang.String#0 자동으로 클래스 이름을 bean 이름으로 사용할 경우 스프링 자체에서
java.lang.String#1 Id를 부여한다.
*/