zoukankan      html  css  js  c++  java
  • spring 事务 @EnableTransactionManagement原理

    @EnableXXX原理:注解上有个XXXRegistrar,或通过XXXSelector引入XXXRegistrar,XXXRegistrar实现了 
    ImportBeanDefinitionRegistrar的registerBeanDefinitions方法,给容器注册XXXCreator。这个Creator实现了后置处理器, 
    后置处理器在对象创建以后,包装对象,返回一个代理对象,代理对象执行方法利用拦截器链进行调用

    * 1)、@EnableTransactionManagement
    *        利用TransactionManagementConfigurationSelector给容器中会导入组件
    *        导入两个组件
    *        AutoProxyRegistrar
    *        ProxyTransactionManagementConfiguration
    * 2)、AutoProxyRegistrar:
    *        给容器中注册一个 InfrastructureAdvisorAutoProxyCreator 组件;
    *        利用后置处理器机制在对象创建以后,包装对象,返回一个代理对象(增强器),代理对象执行方法利用拦截器链进行调用;
    * 3)、ProxyTransactionManagementConfiguration是个@Configuration
    *        1、给容器中注册事务增强器transactionAdvisor;
    *           1)、事务增强器要用事务注解的信息,AnnotationTransactionAttributeSource解析事务注解
    *           2)、事务拦截器transactionInterceptor:
    *              TransactionInterceptor;保存了事务属性信息,事务管理器;
    *              TransactionInterceptor是一个 MethodInterceptor;
    *              在目标方法执行的时候;
    *                 执行拦截器链;
    *                 只有事务拦截器:
    *                    1)、先获取事务相关的属性
    *                    2)、再获取PlatformTransactionManager,如果事先没有添加指定任何transactionmanger
    *                       最终会从容器中按照类型获取一个PlatformTransactionManager;
    *                    3)、执行目标方法
    *                       如果异常,获取到事务管理器,利用事务管理回滚操作;
    *                       如果正常,利用事务管理器,提交事务
  • 相关阅读:
    FFmpegTool 这个是很早以前写得ffmpeg c99部分转C89工具代码
    mmsplayer V2 for IOS 完成. V2 所有汇总
    关于mmsplayer一些电台不支持播放问题说明
    libmpg123 解码库用法
    [置顶] mmsplayer V2 for IOS 完成. V2 所有汇总
    使用lipo合并iPhone模拟器和真机的静态类库
    vbs编程
    Adobe reader查阅PDF文件无法显示中文
    常去的下载网站
    .Net程序设计快速入门——分页设计篇
  • 原文地址:https://www.cnblogs.com/moxiaotao/p/9435764.html
Copyright © 2011-2022 走看看