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가 우선순위가 높다.






results matching ""

    No results matching ""