** 공유가 아닌 개인 공부에 목적을 둔 글입니다
** 설명이 불충분할 수 있으며 잘 정리된 글이 아닐 수도 있습니다
@Autowired 로 의존관계 주입시 여러 빈이 찾아져서 매칭되려고 할 때 스프링이 에러를 뱉게 된다
이 문제는 어떻게 해결할까
@Qualifier
@Qualifier 은 추가 구분자로서 빈을 구분하는 역할을 하지 빈 이름 자체를 변경하는 것이 아니다
빈을 등록할 때 @Qualifier 로 이름을 정해주고, 생성자 주입시나 수정자 주입시, 필드 주입시 등 다양한 주입에서
활용할 수 있다
아래 예시를 보자
RateDiscountPolicy 클래스에 @Qualifier 구분자 어노테이션을 추가해줌으로써 "mainDiscountPolicy"라는 이름으로
해당 빈을 추가적으로 구분할 수 있게 되었다
원래 DiscountPolicy 인터페이스를 구현한 구현체가 Rate, Fix 두 개가 있어서 어느 빈을 가져와야 하는지 불명확했지만
Qualifier 어노테이션을 통해 명확히 Rate 구현체를 주입할 수 있게 되었다
우선 Qualifier 끼리 매칭을 시도하고, 실패하면 빈 이름과 매칭을 시도하는데 그냥 Qualifier 끼리 매칭하도록 쓰는 것이
좋다
@Primary
Primary 는 우선순위를 정해주는 방법이다
여러 빈들 중에 @Primary 가 있는 빈이 우선적으로 의존관계 주입된다
RateDiscountPolicy 에 @Primary 를 붙이면 이 빈이 우선순위를 갖고 가장 먼저 매칭된다
코드에 변경할 사항은 없다
실무에서 사용할 때는 메인 db 의 스프링 빈은 @Primary 를 붙여서 빈을 조회할 때 따로 @Qualifier 로 찾을 필요 없이
편하게 조회하고,
서브 db 빈을 조회할 때는 @Qualifier 를 지정해서 명확하게 지정하는 방식으로 사용한다
이 둘의 우선순위는 Qualifier 가 Primary 보다 우선한다
'Spring' 카테고리의 다른 글
[Spring] DI, 의존관계 주입 방법 (0) | 2024.04.07 |
---|---|
[Spring] @Autowired 의존관계 주입시 조회되는 빈이 여러개일때 (0) | 2021.11.29 |
[Spring] @ComponentScan 과 @Autowired (0) | 2021.11.29 |
[Spring] 싱글톤 컨테이너와 @Configuration (0) | 2021.11.28 |
[Spring] @Configuration, @Bean 이해하기 (0) | 2021.11.26 |