JpaRepositoryFactoryBean과 JpaRepositoryFactory에 의해서 Repository 의 구현체가 결정되는 듯. 현재 기본 구현체는 SimpleJpaRepository 혹은 QueryDslRepository 두개임.
@EnableJpaRepositories(repositoryFactoryBeanClass = 여기서 다른 팩토리Bean 지정)
[Custom]JpaRepositoryFactoryBean : JpaRepositoryFactoryBean을 상속하여 구현하고 createRepositoryFactory()를 오버라이드하여 [Custom]JpaRepositoryFactory 객체를 생성하여 리턴한다.[Custom]JpaRepositoryFactory : JpaRepositoryFactory를 상속하여 구현하고,getTargetRepository()를 오버라이드하여 [Custom]JpaRepositoryImpl객체를 리턴한다.getRepositoryBaseClass() 메소드를 오버라이드하여 [Custom]JpaRepositoryImpl 객체를 리턴한다.[Custom]JpaRepository 인터페이스 : JpaRepository와 QueryDslPredicateExecutor, JpaSpecificationExecutor를 상속한 인터페이스. 상속 대상 인터페이스는 무엇을 원하느냐에 따라 다르다. Specification이 불필요하다면 JpaSpecificationExecutor를 상속할 필요가 없는 식.[Custom]JpaRepositoryImpl : [Custom]JpaRepository 인터페이스를 구현하고 QueryDslJpaRepository 혹은 QueryDSL이 불필요하면 SimpleJpaRepository를 상속한다.