Spring Data JPA 自动配置核心原理
2022-02-09 00:44:56 1 举报
Spring Data JPA 涉及到的核心流程与核心类
作者其他创作
大纲/内容
ESB企业服务总线应用层
Object target = this.getTargetRepository(information); ProxyFactory result = new ProxyFactory(); result.setTarget(target); T repository = result.getProxy(this.classLoader);---JdkDynamicAopProxy#getProxy(java.lang.ClassLoader)
ConfigurationClassPostProcessor#processConfigBeanDefinitions
RepositoryFactoryBeanSupport#afterPropertiesSet
Spring Data JPA 自动配置
获取repository
所有的自动配置记录autoConfigurationEntry注入org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration
JpaRepositoriesAutoConfiguration
@EnableJpaRepositories
扫描所有Repository接口并注入spring容器
AutoConfigurationImportSelector.AutoConfigurationGroup#process
AutoConfigurationImportSelector#getAutoConfigurationEntry
集群化、负载均衡数据缓存读写分离配CDN加速
中心化服务业务拆分分而治之
业务组件和基础组件的耦合
@SpringBootApplication
服务网格架构
RepositoryComponentProvider#findCandidateComponents
根据JDK动态代理创建代理类
DefaultListableBeanFactory#registerBeanDefinition
云原生架构演进
找到自定义的Repository接口
RepositoryConfigurationDelegate#registerRepositoriesIn
容器技术,容器编码技术DevOps微服务组件化(中台技术)
JpaRepositoriesRegistrar
创建默认代理类SimpleJpaRepository
单点故障、性能瓶颈(存在阻塞)
AutoConfigurationImportSelector#process
AbstractRepositoryConfigurationSourceSupport#registerBeanDefinitions
集中式架构(单体架构)
云原生架构
分布式架构部署层
基础设施下沉基础设施团队和业务团队能够解耦
SOA实现
@EnableAutoConfiguration
AbstractApplicationContext#refresh
this.invokeBeanFactoryPostProcessors(beanFactory)
调用SimpleJpaRepository的CRUD方法执行
吞吐量变大
RepositoryFactorySupport#getRepositoryInformation
org.springframework.boot.autoconfigure工程的spring.factories
交付周期缩短、服务可靠性提高、终端设备多样性
AutoConfigurationImportSelector#getCandidateConfigurationsSpringFactoriesLoader.loadFactoryNames()
执行代理类逻辑 内部反射调用目标实现类
getAutoConfigurationEntry
DefaultAopProxyFactory#createAopProxy
放入AutoConfigurationGroup.entries
JpaRepositoriesImportSelector#determineImport
RepositoryFactorySupport#getRepository
规模增大、业务场景增多
根据JDK动态代理创建代理类获取目标实现类org.springframework.data.jpa.repository.support.SimpleJpaRepository
@Import({AutoConfigurationImportSelector.class})
JdkDynamicAopProxy#invoke
微服务架构应用层
去中心化服务DDD 领域驱动设计
0 条评论
回复 删除
下一页