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来解析

  • 相关阅读:
    HDU 5569 matrix
    HDU 2795 Billboard
    HDU 1394 Minimum Inversion Number
    HDU 1754 I Hate It
    HDU 1166 敌兵布阵
    FOJ 2206 函数求解
    hihoCoder 1252 Kejin Game
    hihoCoder 1257 Snake Carpet(很简单的构造方法)
    2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)
    HDU 2485 Destroying the bus stations
  • 原文地址:https://www.cnblogs.com/sniffs/p/13357722.html
Copyright © 2011-2022 走看看