작성
·
464
-1
의존성 주입 최상단에 있는 SpringDataJpaConfig 파일에서 주입받는 SpringDataJpaItemRepository는 어디서 받는 것인지 모르겠습니다.
스캔 베이스 패키지를 web으로 한정지었기 때문에 SpringDataJpaItemRepository 인터페이스에 @Repository를 달아봤자 어차피 스캔도 안 되고, Config 파일에서도 단순히 주입받아서 사용해서... 어디서 주입되는지 잘 몰라서 아래처럼 생성자에서 로그를 찍어봤습니다.
private final SpringDataJpaItemRepository repository;
public SpringDataJpaConfig(SpringDataJpaItemRepository repository) {
this.repository = repository;
System.out.println(repository.getClass());
}
class jdk.proxy2.$Proxy95
이게 스프링 데이터jpa의 부가기능으로 스프링이 jdk 인터페이스 프록시 객체로 만들어주는 것으로 보이는데요.
질문 1.
SpringDataJpaItemRepository가 JpaRepository<T, ID>를 상속받는데, 개인적인 생각으로는 의존성 주입 과정에서 JpaRepository<T, ID> 인터페이스를 상속받는 타입을 감지하는 순간(스프링 기초 수업을 안 들어서 정확히 어느 과정인지는 잘 모르겠습니다ㅠ) 해당 타입으로 빈을 만들어버리는 것 같은데 대략적인 과정이 이게 맞는지 궁금합니다.
질문 2.
위 과정이 맞다면, JpaItemRepositoryV2 같은 중간 계층 클래스를 두지 않고 직접적으로 SpringDataJpaItemRepository를 레포지토리로 사용하려고 할 때는, @Repository 를 붙이지 않아도 서비스 계층에서 직접 주입받아서 사용하는 것도 가능한가요? 직접 돌려보려고 했는데 이거는 하면 코드 구조를 서비스, 레포지토리 전부 갈아치워야 할 것 같아서... 일단 질문 올린 김에 같이 질문드립니다