[Spring] @Qualifier

0_0ni·2022년 12월 19일

Spring을 이용해 서비스를 만들 경우, Bean을 만들어 등록해야 한다.
이 때, 스프링의 Autowired 기능을 이용하여 의존성을 주입받는데, Bean에 하나의 타입만 있다면 해당 객체를 주입 받지만, 만약 같은 타입이면 문제가 발생한다.

Qualifier를 사용해야 하는 이유

특정 객체를 찾기 위한 이름을 지정하는 과정이다.
ex) 여러 개의 Web Client를 구분해 등록할 수 있도록 하기 위해서 등

사용방법

public WebClient kakaoWebClient(ObjectMapper baseConfig) {
	ExchangeStrategies exchangeStrategies = getExchangeStrategies(baseConfig);
    
    return WebClient.builder()
    .baseUrl("https://dapi.kakao.com");
    .exchangeStrategies(exchangeStrategies)
    .defaultHeader("Authrization", "KakaoAK" + SecretKey.KAKAO_API_KEY)
    .build();
}

위와 같이 Bean으로 만들 객체를 정의하면서 Qualifier도 함께 지정해준다. 주입을 받을 때는 아래와 같이 처리한다.

public class LocationRequestConfig {
	private final WebClient kakaoWebClient;
    
    public LocationRequestConfig(@Qualifier("KakaoWebClient") WebClient kakaoWebClient) {
    this.kakaoWebClient = kakaoWebClient;
    }
    
    @Bean
    public Requesters requesters() {
    	return new Requesters(kakaoWebClient);
    } 
 }

이 밖에도 필드 주입 혹은 설정을 xml로 지정하는 방법 등이 있다.

참고: https://mungto.tistory.com/458
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-autowired-annotation-qualifiers

0개의 댓글