인프런 커뮤니티 질문&답변
NoUniqueBeanDefinitionException
작성
·
613
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
AutoAppConfig와 AppConfig의 빈을 중복 등록하면 충돌이 일어나기 때문에
@ComponentScan(
basePackages = "hello.core",
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
이런식으로 필터를 씌워 막아둔 것으로 압니다.
그런데 CoreApplicationTests를 실행하였을 때, NoUniqueBeanDefinitionException이 터지고 이를 해결하기 위해 AppConfig의 @Configuration 어노테이션에 주석을 걸어두니 정상적으로 테스트가 통과됩니다. 왜 이런건가요?
퀴즈
What are the main reasons why Field Injection is generally not recommended?
Because it is difficult to guarantee immutability
Because changing dependencies is easy
Because it's difficult to test with pure Java code
Because writing configuration code is complex
답변 2
0
CoreApplicationTests 를 실행하면 스프링부트 어플리케이션이 자체적으로 ComponentScan 을 하게 됩니다.

자체적인 ComponentScan 에는 우리가 따로 excludeFilter 를 설정한 적이 없으니 @Configuration 이 붙은 AppConfig 도 빈으로 등록이 되고 거기에서 생성하는 빈도 다 등록이 되어 NoUniqueBeanDefinitionException 이 터지게 됩니다.
통합 테스트 시 ApplicationContext 를 구성하는 Configuration class 를 지정할 수 있으니 그 방법으로 해결해보셔도 좋을 것 같습니다.







강사님 저도 같은 문제가 발생해서 같은 방법을 사용하였더니 오류가 발생하지 않았습니다 혹시 답변 공유 가능하실까요?