RequiredArgsConstructor VS Qualifier 빈 주입

2022. 5. 15. 23:36Spring

RequiredArgsConstructor VS Qualifier 빈주입

문제

  • Lombok@RequiredArgsConstructor
    final인 필수 멤버변수에 대해서, 자동으로 생성자를 만들어주는 어노테이션이다.

    @RequiredArgsConstructor
    public class Example{
    
      @Qualifier("MyTest")
      private final Test test;
    }
  • spring@Qualifier를 사용하여, 주입되는 Bean을 지정해주었지만, 다음 에러가 발생...🥲(왜..왜그러는거야..)

    Parameter 0 of constructor in podo.WantQuailfierAutowired required a single bean, but 2 were found:

원인

먼저 lombok이 제공하는 @RequiredArgsConstructor는 애노테이션 까지 함께 포함해서 생성자를 만들지는 않습니다. - 인프런 김영한님 답변

추가적인 원인 설명

@RequiredArgsConstructor
public class Example{

    @Qualifier("MyTest")
    private final Test test;

    public Example(Test test){ // @Qualifier줘야함
        this.test = test;
    }
}
  • Lombok@RequiredArgsConstructor 어노테이션을 인지하고, 자동으로 생성자를 이상없이 만든다... 하지만 생성자에 인자를 표시할때, @Quailfier어노테이션을 인자에 표시하지 않는다. 그래서 Test 클래스 빈이 N개인데 도대체 뭘 주입하라는거야?? 라고 에러를 내뱉는것입니다.

해결

두 가지 해결법

  • 위에서 김영한님의 답변에서 보다시피 Lombok을 설정해주시면 됩니다.

  • 인스턴스 이름을 변경해주는 방법도 있습니다!

    @RequiredArgsConstructor
    public class Example{
    
      // @Qualifier("MyTest")
      private final Test MyTest;
    }
    • 저는 Lombok으로 설정하여 수정했습니다 :)

참고

podo님 블로그
인프런 김영한님 답변