프레임워크/Spring

[Spring] @Qualifier란 무엇인가?

멍토 2021. 8. 24.

Spring을 이용하여 서비스를 만들다보면 필연적으로 Bean을 만들어 등록하는 일이 생기게 된다.

스프링의 강력한 기능중 하나인 Autowired를 이용하여 의존성을 주입받는데, Bean에 하나의 타입만 있다면 해당객체를 주입받지만 만약 같은 타입이면 문제가 발생한다.

 

Qualifier를 왜 사용해야 할까??

내 상황의 경우 WebClinet를 Bean으로 등록했는데 요청해야 할 url이 많아서 여러개의 WebClient를 등록하면서 문제가 발생하였다.(카카오, 네이버, 공공API 등)

물론 그때그때 생성해서 쓰면되지만 자주 사용하고 재사용이 가능하다면 방법을 찾아야 하지 않을까?

이러한 문제를 해결하기 위해서 @Quailifer를 이용하게 된다.

특정한 객체를 찾기위한 이름을 지정한다고 생각하면 된다.

 

사용방법

@Bean
@Qualifier("KakaoWebClient")
public WebClient kakaoWebClient(ObjectMapper baseConfig) {
  ExchangeStrategies exchangeStrategies = getExchangeStrategies(baseConfig);

  return WebClient.builder()
    .baseUrl("https://dapi.kakao.com")
    .exchangeStrategies(exchangeStrategies)
    .defaultHeader("Authorization", "KakaoAK " + SecretKey.KAKAO_API_KEY)
    .build();
}

 

위와 같이 빈으로 만들 객체를 정의하면서 Qualifier를 지정해준다.

주입을 받을때는 아래와 같이 처리한다.

 

@Configuration
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://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-autowired-annotation-qualifiers

댓글

💲 광고입니다.