-
카테고리
-
세부 분야
백엔드
-
해결 여부
해결됨
스프링 빈 2개 이상 등록됨 : expected single matching bean but found 2
23.02.27 14:36 작성 조회수 1.06k
0
안녕하세요 스프링 입문 강의 수강 중 궁금한 점이 있어 질문 남깁니다.
Spring Data Jpa를 적용하면서 스프링이 JpaRepository를 가진 인터페이스의 구현체를 자동으로 생성하고 빈으로 등록한다는 것으로 이해했습니다.
따라서 기존의 Repository 클래스들의 @Repository 어노테이션과 @Service 어노테이션을 삭제 후 Configuration으로 직접 빈을 등록하도록 변경하였습니다.
자동 등록되는 어노테이션을 모두 제거하였고, Config 클래스의 memberRepository 빈 등록 부분도 주석처리 해주었으나 MemberRepositoryImpl이 빈으로 등록되어 다음과 같은 에러가 발생합니다.
MemberRepositoryImpl은 어디에서 빈으로 등록되는 건가요??
답변을 작성해보세요.
1
OMG
2023.02.27
안녕하세요. dasol199님, 공식 서포터즈 OMG입니다.
.
강의에서는 MemberRepositoryImpl을 사용하지 않아 어떤 코드를 작성하셨는지 알 수 없습니다.
MemberRepositoryImpl을 지우고 확인해주세요
.
감사합니다.
dasol199
질문자2023.03.02
강의의 MemoryMemberRepository가 MemberRepositoryImpl입니다
클래스를 지우고 문제를 해결할 수 있지만 어느부분에서 빈이 등록되는지 알고싶어 질문드립니다
강의 순서에 따라
MemoryMemberRepository, JdbcMemberRepository, JdbcTemplateMemberRepository, JpaRepository 순으로 구현체를 변경하였고
이때까지는 문제없이 하나의 빈만 등록되어 정상적으로 동작하는 것을 확인하였습니다.
SpringDataJpaMemberRepository를 Config 클래스에서
@Autowired
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
위와 같이 주입해준 결과 MemoryMemberRepository와 JpaRepository가 둘 다 등록되었습니다.
JpaRepository를 가지고 있는 SpringDataJpaMemberRepository가 자동으로 빈에 등록되는 것은 이해했으나
어디서 MemoryMemberRepository가 빈으로 등록되었는지 모르겠습니다
Config 클래스의 위 코드 제외한 Repository 빈 등록 코드와 각 Repository 클래스의 어노테이션도 삭제된 상태입니다.
OMG
2023.03.02
MemoryMemberRepository, MemberRepositoryImpl에 자동 스프링 빈으로 등록하는 어노테이션을 선언하지 않았다면(@Repository, @Component 등)
스프링데이터JPA 진행중 발생한 상황이라면 아래와 같은 상황으로 보입니다.
영한님의 스프링데이터JPA 강의에서 설명해드리는 내용으로
사용자 정의 구현 클래스 규칙에 해당하여 스프링 빈으로 등록된 상황입니다.
JPA강의 -> 본 강의
MemberRepository(I) -> SpringDataJpaMemberRepository(I)
MemberRepositoryCustom(I) -> MemberRepository(I)
자세한 내용은 영한님의 스프링데이터JPA 강의 혹은 "사용자 정의 클래스 impl"로 검색하시면 많은 자료들을 확인하실 수 있으니 참고 부탁드립니다.
답변 1