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