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的责任链和递归方式执行拦截。
Spring声明事务原理及核心源码分析_第1张图片

InfrastructureAdvisorAutoProxyCreator作用有那些

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

TransactionInterceptor 的作用

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


推荐阅读:
<< << << << << << << <<<手动事务和自定义注解事务代码参考
<<

你可能感兴趣的:(Spring声明事务原理及核心源码分析)