본문 바로가기
  • 실행력이 모든걸 결정한다
Spring Series/Spring Framework

[Spring] @Qualifier 이란?

by 김코더 김주역 2022. 6. 17.
반응형

1. Spring이 제공하는 @Qualifier의 기능

- 타입 외의 부가 정보를 추가해서 자동 와이어링을 세밀하게 제어할 수 있는 방법이다.

- 타입을 기준으로 자동 와이어링하는 환경에서, 동일한 타입이 2개 이상 존재하는 bean들 중 하나의 bean을 선택할 때 유용하다.

- 지정한 qualifier를 가진 bean이 없다면, 이름이 해당 qualifier값인 bean을 검색한다.

 

 

2. Bean에 qualifier 설정

1) XML 설정 방식

- <bean> 안에 qualifier값을 지정하면 된다.

<bean id=dataSourceA" class="...">
    <qualifier value="mainDB" />
</bean>

 

2) Annotation 설정 방식

- @Qualifier 어노테이션의 파라미터로 qualifier 값을 지정하면 된다.

@Component
@Qualifier("mainDB")
public class DataSourceA {
    ...
}

 

 

3. Autowired에 qualifier 적용

- Bean을 불러올 때에는 @Qualifier 어노테이션의 파라미터에 qualifier 값을 넣어서 @Autowired와 함께 작성해주면 된다.

@Autowired
@Qualifier("mainDB")
DataSource dataSource;

 

또는, 아래와 같이 커스텀 qualifier 어노테이션을 정의해서 @Autowired와 함께 작성하는 방법을 사용해도 된다.

@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface MainDB {
    String value();
}
@Autowired
@MainDB
DataSource dataSource;

 

- 생성자나 일반 메소드에 @Autowired를 적용하는 경우에는 그 자체에 @Qualifier를 부여하는 것은 의미가 없기 때문에, 다음과 같이 파라미터에 직접 @Qualifier을 부여하는 방법을 사용하면 된다. 이 방법은 선택적인 세밀한 DI가 가능하기 때문에 좋은 방법이다.

@Autowired
public void config(@Qualifier("mainDB") DataSource dataSource, Printer printer) {
    ...
}

 

 

● 참고 자료 : 토비의 스프링 3.1 Vol.2

반응형

댓글