spring-data-jpa源码解析
repository接口如何生成代理bean
时序图

基本流程
- @EnableJpaRepositories
- @Import(JpaRepositoriesRegistrar.class)
- JpaRepositoriesRegistrar
- 指定repository配置类为JpaRepositoryConfigExtension
- JpaRepositoryConfigExtension
- 指定repository工厂类为JpaRepositoryFactoryBean
- JpaRepositoryFactoryBean
- 每个repository对应一个JpaRepositoryFactoryBean
- afterPropertiesSet方法生成持有的JpaRepositoryFactory
- JpaRepositoryFactory
repository方法如何执行的
实现类RepositoryFactorySupport.QueryExecutorMethodInterceptor
查询解析策略QueryLookupStrategy

- DeclaredQueryLookupStrategy
- 解析注解(例如:@Query、@Procedure等)生成对应的RepositoryQuery
- CreateQueryLookupStrategy
- 解析方法名生成RepositoryQuery,底层实现类:PartTreeJpaQuery
- CreateIfNotFoundQueryLookupStrategy
- 默认值,是上面两个解析策略的结合。先注解,再尝试方法名
repository方法接口RepositoryQuery

- NativeJpaQuery: @Query(nativeQuery = true)底层实现类
- SimpleJpaQuery:@Query(nativeQuery = false)底层实现类
- PartTreeJpaQuery:方法名上没注解时的方法实现类。直接解析方法名
方法名解析流程PartTreeJpaQuery#execute

- 底层实际执行类QueryImpl

方法名如何解析成PartTree对象