美文网首页RxJavaJava编程语言爱好者
Spring声明事务原理及核心源码分析

Spring声明事务原理及核心源码分析

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2021-02-16 08:01 被阅读0次

上一篇 <<<Spring事务常识汇总
下一篇 >>>手动事务和自定义注解事务代码参考


Spring声明事务底层实现原理

Spring事务是基于AOP环绕通知和异常通知实现的
Spring申明事务底层是bean在实例化后,通过BeanPost的后置通知对注有@Transactional注解的类进行TransactionInterceptor拦截器增强,根据是否有接口创建CGLIB或JDK动态代理类。方法执行的时候通过AOP的责任链和递归方式实现。
不过申明事务要启用,必须加上@EnableTransactionManagement注解才可以。

核心代码执行流程

1、注解@EnableTransactionManagement开启事务支持
2、@Import({TransactionManagementConfigurationSelector.class})
3、TransactionManagementConfigurationSelector祖宗ImportSelector,自动注入AutoProxyRegistrar.class和ProxyTransactionManagementConfiguration.class
4、AutoProxyRegistrar.class实际注入InfrastructureAdvisorAutoProxyCreator.class,它的祖宗是BeanPostProcessor.class。
beanId:org.springframework.aop.config.internalAutoProxyCreator
class:AspectJAwareAdvisorAutoProxyCreator.class
5、ProxyTransactionManagementConfiguration.class实际注入拦截器transactionInterceptor.class,祖宗是MethodInterceptor.class
beanId:transactionInterceptor
class:TransactionInterceptor.class
6、程序启动后调用BeanPostProcessor的后置处理器,找到AbstractAutoProxyCreator的postProcessAfterInitialization方法,将注有@Transactional注解的增强器加入到代理类中,和AOP初始化一致
Object[] specificInterceptors = this.getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, (TargetSource)null);
7、方法执行的时候,会调用代理类的invoke方法或intercept方法,真正通过AOP的责任链和递归方式执行拦截。

InfrastructureAdvisorAutoProxyCreator作用有那些

它的父类是AbstractAutoProxyCreator,祖宗是BeanPostProcessor,完成启动时候通过检测方法上面是否有@Transactional注解来进行对bean的增强。

TransactionInterceptor 的作用

它的祖宗是MethodInterceptor,在方法真正执行的时候,主要完成对事务的拦截,在开始之前创建事务,完成后提交事务,如果碰到异常就回滚事务的操作。


推荐阅读:
<<<Spring IOC的初始化原理
<<<SpringBean的生命周期流程图
<<<SpringBean单例情况下解决循环依赖的原理
<<<Spring AOP的底层原理
<<<Spring AOP通知责任链模式图解
<<<Spring AOP核心源码解读
<<<Spring事务常识汇总
<<<手动事务和自定义注解事务代码参考
<<<Spring常用注解汇总

相关文章

  • Spring声明事务原理及核心源码分析

    上一篇 << >> Spring声明事务底层实现原理 Spring事务是基于AOP环绕通知和异常通知实现的Spri...

  • 2018-06-09

    spring源码分析(八) 目录五、源码分析--6、Spring 事务原理详解----6.1、什么是事务(Tran...

  • 2018-05-26

    spring源码分析(六) 目录五、spring源码分析--5.7、Spring JDBC 设计原理及二次开发--...

  • 2018-05-19

    spring源码分析(五) 目录五、源码分析--5.6、Spring AOP 设计原理及具体实践----5.6.1...

  • Spring扩展功能之BeanFactoryPostProces

    前面我们学习了Spring注解版的声明式事务和Aop功能的开发及相关源码解读,其实不然,Spring还有一块核心的...

  • Spring事务——事务原理源码分析

    前言 先贴一张从网上找到的Spring事务图,因为源码比较长,结合图看的话,不容易看到后边忘记 以SpringBo...

  • 【Spring源码】声明式事务源码分析

    环境搭建 加入相关依赖c3p0、spring-jdbc、mysql-connector-java、spring-c...

  • 分布式事务(2)Spring事务

    2.1 Spring事务原理 Spring支持编程式事务和声明式事务。编程式事务就是用个事务类Transactio...

  • Spring事务

    Spring AOP原理分析介绍了AOP的一些细节,有了这篇文章的基础,我们再来分析Spring中声明式事务的实现...

  • spring 声明式事务管理

    本节阐述在事务相关的问题上,Spring框架的声明式事务管理的内部工作原理。 关于Spring框架的声明式事务支持...

网友评论

    本文标题:Spring声明事务原理及核心源码分析

    本文链接:https://www.haomeiwen.com/subject/nhhqxltx.html