위 그림처럼 JPA Repository는 분명 interface만 정의해줬다. 구현체를 내가 따로 만든게 없다.

그런데 위 그림처럼 사용하는쪽에서 해당 Repository를 D.I를해서 사용할 수 있다. 구현체를 알아서 스프링에서 만들어주니, 쓸수 있는거일텐데..

도대체 Repository 구현체는 어떤과정에 의해서 만들어지는것인가..?

 

디버깅을 통한 결과이다.

 

JpaRepositoryFactoryBean -> JpaRepositoryFactory -> interface (ex.PaymentRepository)를 가지고 reflection implement를 실행 -> SimpleJpaRepositoryImpl

그리고 Repository가 저렇게 JpaRepositoryFactory에서 생성이 되는 전제조건은 Repository를 스캔하는 base package를 설정해놔야 한다.
이전에 @Component, @Service , @Bean 들은 두개의 스캔과정을 가지고 있다는것을 알게 됐다.

1) @ComponentScan 2) EnableAutoConfigureScan 

@Repository는 위 2가지 스캔 과정과 별개로 다른 스캔 과정, 어노테이션이 필요하다! 

@SpringBootApplication이 붙은 메인클래스에 Repository는 @EnableJpaRepositories 어노테이션으로 설정이 가능하다. 저렇게 하면 basepackage가 com.waug.auth.common.rememberme.repository가 된다. 설정을 안하면 디폴트로 main 아래 java 패키지이다.

 

 

 

+ Recent posts