본문 바로가기

SpringFramework Core - I. IoC 컨테이너/10. 클래스패스 스캐닝과 관리받는 컴포넌트들

10.8. 어노테이션으로 Qualifier 메타데이터 제공하기

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-scanning-qualifiers

 

 

@Qualifier 어노테이션은 'Qualifier들을 활용한 어노테이션 기반의 정교한 Autowiring'에서 알아봤다. 해당 장에서는 @Qualifier 어노테이션의 용례와, autowire 후보들을 정교하게 제어하게 해주는 커스텀한 Qualifier 어노테이션들에 대해 알아봤다. 그 예시들은 XML bean 정의에 기반했기 때문에, XML의 bean 요소의 자식 요소들인 'qualifier'나 'meta' 요소들을 통해 후보 bean 정의들에 수식자 메타데이터를 제공했다. 클래스패스 스캐닝을 통한 컴포넌트 자동 탐지를 사용할 때는, 후보 클래스에 type-level의 어노테이션으로 수식자 메타데이터를 제공할 수 있다. 다음 예시는 이 기술을 보여준다.

@Component
@Qualifier("Action")
public class ActionMovieCatalog implements MovieCatalog {
    // ...
}
@Component
@Genre("Action")
public class ActionMovieCatalog implements MovieCatalog {
    // ...
}
@Component
@Offline
public class CachingMovieCatalog immplements MovieCatalog {
    // ...
}

※ 대부분의 어노테이션 기반의 대안들처럼 어노테이션 메타데이터는 클래스 정의 자체에 한정되어야 한다는 점을 주의하라. 반면에, XML을 사용하는 것은 같은 타입의 여러 bean들에게 수식자 메타데이터의 변형된 형태를 제공한다. 왜냐하면 그 메타데이터는 '클래스마다' 제공된 것이 아니라 '인스턴스마다' 제공된 것이기 때문이다.