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 애노테이션에 대해서는 책 본문 참조