작성
·
142
0
NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository
UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [C:\Users\soobi\Documents\study-springBoot\core\core\out\production\classes\hello\core\member\MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository
이 두가지 오류가 뜨는데 강의해주실때 이렇게 configuration.class 를 제외시키면서
auto가 아닌 그냥 수동으로 빈을 등록하는 Appconfig는 제외가 되야하는게 맞는게 이렇게 빈이 중복됐다고 나오는 이유를 알수가 없습니다. ㅜㅜ
coreApp에서 난 이러한 오류 해결방법을 알려주시면 감사하겠습니다.
@Configuration
@ComponentScan(
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {
// @Bean(name = "memoryMemberRepository")
// MemberRepository memberRepository() {
// return new MemoryMemberRepository();
// }
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
수빈님께서 겪으신 오류는 MemberRepository
타입의 빈이 두 개(memoryMemberRepository
, memberRepository
) 있으면서, 스프링이 자동으로 의존성을 주입할 대상 빈을 하나만 찾으려고 했을 때 발생한 것으로 보입니다. 자동 빈 등록을 사용하면서 수동 빈을 추가할 때 주의해야 하는데, 이 경우 @ComponentScan
에서 제외하려고 하신 @Configuration
클래스 내의 @Bean
도 함께 제외되어야 정상적으로 빈이 등록됩니다.
AutoAppConfig에서 수동으로 memoryMemberRepository
라는 이름의 빈을 등록하려고 했으나, 주석 처리를 해놓으신 상태이고, 스프링의 자동 빈 등록 과정에서 같은 타입의 빈이 또 발견되어 NoUniqueBeanDefinitionException
오류가 발생한 것으로 보입니다.
해결 방법 중 하나로, AutoAppConfig
에서 @Bean
으로 등록하려는 MemberRepository
빈을 주석 처리해둔 부분을 그대로 두거나, 해당 빈을 완전히 삭제하여 자동으로 같은 타입의 빈이 2개 이상 등록되지 않도록 하는 것입니다. 또 다른 방법으로는 @Qualifier
를 사용하여 의존성 주입 시 구체적으로 사용할 MemberRepository
빈을 지정하는 방법이 있습니다.
추가로, CoreApplicationTests
가 실행될 때 ApplicationContext
를 제대로 로드하지 못했다는 오류 메시지도 확인해보셔야 하는데, 이는 테스트 실행 도중 주입해야 할 빈을 찾을 수 없어서 발생할 수 있습니다. 이 경우 테스트 설정을 점검하거나 @MockBean
같은 테스트 도구를 사용하여 의존성을 명시적으로 제공해야 할 수 있습니다.
아래의 Spring Boot 공식 문서를 참고하시어 테스트 관련 추가 정보를 얻고, 테스트 설정 방법에 대해 더 자세히 알아보시길 권장합니다:
Spring Boot 테스트 구조: 18.16.2. Structure @Configuration
classes for inclusion in slice tests
Spring Boot 테스트 설정 탐지: 7.8.3. Detecting Test Configuration
Spring Boot 자동 설정 테스트: 7.10.4. Testing your Auto-configuration
Spring Boot 자동 구성 테스트: 7.8.3. Auto-configured Tests
이 문제를 해결하는 데 도움이 되길 바랍니다.