Search
Duplicate
🎲

@Primary, @Qualifier

의존성 주입 시, 특정 타입의 Bean이 여러 개라면 스프링 컨테이너는 어떤 기준을 가지고 주입 기준을 세울까?
기준을 제공해야 한다. 기준을 제공하지 않으면 어떤 빈을 주입해야할 지 모르기 때문에 NoUniqueBeanDefinitionException 예외가 발생한다.

@Primary

주입되는 대상에 @Primary를 사용해 우선순위를 지정하는 방식이다.
해당 어노테이션이 붙어 있는 클래스의 빈이 우선적으로 선택된다.
당연하게도 @Primary를 타입이 같은 빈들에게 중복적으로 적용하는 경우, 문제가 발생한다.

@Qualifier

주입하는 대상 또는 구현체에 @Qualifier를 이용해 우선적으로 주입받고자 하는 빈을 명시하는 방법이다.
@Primary보다 우선순위가 높으며 주입되는 대상과 구현체에 각각 @Qualifier(”등록이름”)을 명시해주어야 한다.
일반적으로 추천되는 방법이다.
@Primary에 비해 더 구체적이고 더 높은 우선순위를 가지기 때문이다.