美文网首页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声明事务原理及核心源码分析

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