인프런 커뮤니티 질문&답변

이우진님의 프로필 이미지
이우진

작성한 질문수

스프링 핵심 원리 - 기본편

옵션 처리

NoUniqueBeanDefinitionException

작성

·

503

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 어노테이션에 주석을 걸어두니 정상적으로 테스트가 통과됩니다. 왜 이런건가요?

답변 2

0

CoreApplicationTests 를 실행하면 스프링부트 어플리케이션이 자체적으로 ComponentScan 을 하게 됩니다.

image


자체적인 ComponentScan 에는 우리가 따로 excludeFilter 를 설정한 적이 없으니 @Configuration 이 붙은 AppConfig 도 빈으로 등록이 되고 거기에서 생성하는 빈도 다 등록이 되어 NoUniqueBeanDefinitionException 이 터지게 됩니다.

통합 테스트 시 ApplicationContext 를 구성하는 Configuration class 를 지정할 수 있으니 그 방법으로 해결해보셔도 좋을 것 같습니다.

image

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 이우진님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

 

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

 

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

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

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 박태원님 링크를 참조해서 문제가 발생하는 코드를 올려주시면 도움을 드리겠습니다.

감사합니다.

이우진님의 프로필 이미지
이우진

작성한 질문수

질문하기