zoukankan      html  css  js  c++  java
  • spring学习总结016 --- spring事务原理

    前面介绍了事务的使用方法,开启事务可以通过@EnableTransactionManagement或者<tx:annotation-driven />,前面说过spring的事务实现是基于AOP实现的,下面分析下spring事务的实现原理

    @EnableTransactionManagement

    和AOP类似,开启事务注解使用了bean导入注解@Import,通过ImportSelector方式导入bean;实现类为TransactionManagementConfigurationSelector

    在代理模式mode=AdviceMode.PROXY时,指定通过AutoProxyRegistrar和ProxyTransactionManagementConfiguration方式导入bean

    AutoProxyRegistrar

    该类为ImportBeanDefinitionRegistrar接口的实现类,用于动态注册bean定义,跟踪源码,找到其动态注册了InfrastructureAdvisorAutoProxyCreator类型的bean

    InfrastructureAdvisorAutoProxyCreator为bean后置处理器,在postProcessAfterInitialization方法中创建代理对象

    ProxyTransactionManagementConfiguration

    该类为spring配置类,主要注册了如下三种bean定义:

    1、AnnotationTransactionAttributeSource

    用于扫描使用@Transactional注解的方法,并读取事务配置getTransactionAttribute方法,如事务传播行为、隔离级别等

    2、TransactionInterceptor

    spring事务中很重要的类,提供了事务执行的方式, invoke方法;并且注入了事务管理器属性;

    执行流程

    3、BeanFactoryTransactionAttributeSourceAdvisor

    Advisor实现类,遵从Advisor规范,在代理调用时,调用该类的增强方法getAdvice;该类注入了TransactionInterceptor,因此会先使用TransactionInterceptor进行增强;

    XML配置方式事务原理

    前面的AOP和事务都是以注解的方式进行说明的,这里说明下XML方式的原理;

    spring中解析XML定义都是通过NameSpaceHandler来解析的,spring事务通过TxNameSpaceHandler来解析

  • 相关阅读:
    Zlib编译
    最新Webstrom, Idea 2019.2.3 的激活
    图像理解与深度学习开篇
    C# 反射(Reflection)
    SpringMVC中使用forward和redirect进行转发和重定向以及重定向时如何传参详解
    Navicat for Oracle中如何使用外键
    【数据库】主键,外键,主表,从表,关联表,父表,子表
    onclick事件没有反应的五种可能情况
    button小手设置 css的cursor
    Spring MVC F5刷新问题
  • 原文地址:https://www.cnblogs.com/sniffs/p/13357722.html
Copyright © 2011-2022 走看看