RequiredArgsConstructor VS Qualifier 빈 주입
2022. 5. 15. 23:36ㆍSpring
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으로 설정하여 수정했습니다 :)
참고
'Spring' 카테고리의 다른 글
In-memory 왜써? TestContainer쓰자! (0) | 2024.07.11 |
---|---|
인터페이스 빈 주입을 해야하는 이유 (0) | 2022.05.15 |
[Spring] BDDMockito VS Mockito (0) | 2021.08.12 |
[Spring] TDD VS BDD (0) | 2021.08.12 |
@Mock객체를 사용해서 Page타입 객체 테스트코드 작성하기 (3) | 2021.07.29 |