Spring - Quilifier vs Primary
@Quilifier vs @Primary
@Quilifier 란?
- 의존관계 주입시 추가적인 방법을 제공하는 어노테이션이다.
- 하나의 인터페이스에 2개의 구현체가 빈으로 모두 등록 되어있는 경우에는 어떤걸 가져와야 될 지 혼란이 있는 경우가 생긴다. 이 때 @Quilifier로 이름을 부여하여 그걸로 확인할 수 있다.
- 예를들어 Discount 에 FixDiscount와 RateDiscount 2개가 다 등록이 되어있다고 하자.
- 그러면 Discount discount « 이걸 사용하는 곳에서 Fix를 넣을지 Rate를 넣을지 스프링이 판단할 수 없다.
- 그래서 @Quilifier(“이름”) 을 각 Discount 위에 선언하고, 생성자 매개변수쪽에서 선언하여 매칭시키면 된다.
@Configuration public class AppConfig { @Bean("dogBean") public Animal dog() { return new Dog(); } @Bean("catBean") public Animal cat() { return new Cat(); } @Bean public AnimalService animalService(@Qualifier("dogBean") Animal animal) { return new AnimalService(animal); } }
@Primary 란?
- 이것도 2개의 구현체가 빈으로 모두 등록되어있는 경우 스프링이 어떤걸 가져와야 될 지 혼란이 있는 경우를 대비하기 위함이다.
- @Primary가 붙어있으면 이걸 우선적으로 가져온다. ( @Quilifier 가 없다는 가정하에 )
@Configuration public class AppConfig { @Bean @Primary public Animal dog() { return new Dog(); } @Bean public Animal cat() { return new Cat(); } @Bean public AnimalService animalService(Animal animal) { return new AnimalService(animal); } }
정리
- Quilifier 는 명시적이고 깔끔하긴 하지만, 매번 붙여주기 귀찮다.
- 그래서 @Primary를 많이쓴다.
- 그리고 @Quilifier와 @Primary 둘 다 있을 경우 @Quilifier가 우선순위가 높다.