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

 

bean의 이름 별칭 짓기

bean 이름 별칭 짓기

  • bean은 하나 이상의 이름을 가질 수 있다.
  • 하나의 bean에 여러 개의 이름을 지정하기 위해서는 name 속성에 공백, 쉼표, 세미콜론 등으로 구분하여 지정한다.
  • <alias> 태그를 사용할 수도 있다.
  • bean의 이름 중 하나를 ApplicationContext.getAliases(String) 함수의 파라미터로 넘겨 모든 이름 목록을 가져올 수 있다.
  • id 속성은 name 속성과는 다르게 어떤 구분자를 넣어도 전체를 하나의 이름으로 판단한다.
<!-- id에 한 개, name에 다양한 구분자를 통해 4개, <alias>를 이용하여 한 개, 모두 6개의 이름을 지정한 예 -->
<beans...>
	<bean id="john" name="john johnny, jonathan;jim" class="java.lang.String" />
	<alias name="john" alias="ion" />
</beans>

애노테이션 구성을 이용한 빈 명명 규칙

  • 스테레오타입 애노테이션을 사용 (@Component, @Service, @Repository, @Controller 등)
...
// 별다른 이름 지정이 없으므로 클래스 이름이 bean 이름이 된다. bean 이름은 singer가 된다.
@Component
public class Singer {

	private String lyric = "We found ...";

	public void setLyric(@Value("I'm busted ...") String lyric) {
		this.lyric = lyric;
	}

	public void sing() {
		System.out.println(lyric);
	}
}
  • 위 코드에 singer가 아닌 다른 이름을 지정하기 위해서는 다음과 같이 한다.
...
// @Component 애노테이션에 인자를 전달하여 이 bean의 이름은 johnMayer가 되었다.
@Component("johnMayer")
public class Singer {

...
  • @Component 애노테이션을 이용할 경우 별칭은 지정할 수 없다.
  • 애노테이션을 이용하여 별칭을 지정하기 위해서는 java 구성을 사용해야 한다.
  • @Bean 애노테이션의 name 속성을 이용해서 별칭을 지정하며 지정한 값이 문자열 배열인 경우 첫 번째 값은 id가, 나머지 값은 별칭이 된다.
  • 스프링 4.2부터 도입된 @AliasFor 애노테이션은 애노테이션 속성에 대한 별칭을 선언하는데 사용된다.
  • @Aliasfor 애노테이션은 스테레오 타입 애노테이션에는 사용할 수 없다.
...
@Configuration
public static class AliasBeanConfig {
	// @Bean 애노테이션의 name 속성을 이용하여 별칭을 지정한다.
	@Bean(name={"johnMayer", "john", "jonathan", "johnny"})
	public Singer singer() {
		return new Singer()
	}
}

@AliasFor 애노테이션에 대해서는 책 본문 참조