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

윤 성욱님의 프로필 이미지

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

스프링 데이터 JPA

빈 연결 에러

작성

·

173

·

수정됨

1

  • Could not autowire. There is more than one bean of 'MemberRepository' type.

    Beans:

    memoryMemberRepository   (MemoryMemberRepository.java) springDataJpaMemberRepository   (SpringDataJpaMemberRepository.java)


    <스프링 데이터 JPA> 강의에서 테스트 코드를 실행 했을때 동일한 에러가 뜨는데 해결 방법을 찾지 못하고 있습니다. 도와주세요 ..

    동일한 타입의 빈이 중복 등록되어 발생한 문제임을 알고 있습니다. 어디서 중복 등록이 된 건지 찾지 못하고 있어요

답변 4

2

윤 성욱님의 프로필 이미지
윤 성욱
질문자

MemoryMemberRepository 클래스에 @Repository 어노테인션이 추가되어 있었습니다 ...


해결되었습니다. 감사합니다!!!

0

안녕하세요. 윤 성욱님, 공식 서포터즈 OMG입니다.

MemoryMemberRepository 클래스에 가서 @Repository, @Component 와 같은 어노테이션이 추가되어 있는지 확인해주세요. 작성되어 있다면 제거해주세요.

없을 경우

SpringConfig클래스의 @Bean으로 정의한 memberRepository()를 지웠는지도 확인해주세요.

image

 

해결이 안될 경우 댓글 남겨주세요 😀

감사합니다.

0

윤 성욱님의 프로필 이미지
윤 성욱
질문자

사용하지 않는 빈을 비활성화하고 싶은데 어디인지 모르겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다.

윤 성욱님께서 겪고 계신 “Could not autowire. There is more than one bean of ‘MemberRepository’ type.” 에러는 Spring 애플리케이션에서 동일한 타입의 빈(Bean)이 두 개 이상 존재할 때 스프링이 어떤 빈을 주입해야 할지 결정할 수 없어 발생하는 문제입니다. 윤 성욱님의 경우, memoryMemberRepositoryspringDataJpaMemberRepository 두 가지 타입의 MemberRepository가 존재하기 때문에 발생하는 문제로 보입니다.

이러한 문제를 해결하기 위해서는 특정 상황에 맞는 빈만 주입받도록 설정하거나, 사용하지 않는 빈을 비활성화 해야 합니다. 예를 들어, 해당 컴포넌트나 설정 클래스에 @Primary 어노테이션을 사용하여 주입받을 주된 빈을 명시하거나, @Qualifier 어노테이션을 통해 주입받고자 하는 빈의 ID나 이름을 지정할 수 있습니다. 또 다른 방법으로는 설정 파일에서 특정 빈의 생성 자체를 조건부로 만들거나, @Profile 어노테이션을 사용하여 개발 환경이나 특정 조건에 맞는 빈만 활성화 할 수 있습니다.

해당 문제에 대한 구체적인 해결 사례로, 질문&답변 게시판에 올라온 비슷한 경우를 참고하실 수 있습니다. 다른 사용자도 유사한 문제를 경험하였고, @Primary, @Qualifier, 비활성화 등의 방법으로 해결할 수 있음을 확인할 수 있습니다.

자세한 정보는 다음 링크들을 참고하시기 바랍니다:
- 빈 연결 에러!

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.