Spring을 이용해 서비스를 만들 경우, Bean을 만들어 등록해야 한다.
이 때, 스프링의 Autowired 기능을 이용하여 의존성을 주입받는데, Bean에 하나의 타입만 있다면 해당 객체를 주입 받지만, 만약 같은 타입이면 문제가 발생한다.
특정 객체를 찾기 위한 이름을 지정하는 과정이다.
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