Spring - bean 명명 규칙의 이해하기 1

 

bean의 이름을 사용하는 방법

  • 모든 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를 부여한다.
*/