• spring事物的源码分析


    主流程分析:

    1、通过annotation-driven标签 进行 解析、注册。

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

     init方法中,通过AnnotationDrivenBeanDefinitionParser 对标签进行解析,将其中用来对bean进行包装的beanPostProcessor的advisor 注册到BeanDefinitionRegistry中去。

    org.springframework.transaction.config.TxNamespaceHandler.init();
    @Override
    public void init() {
    registerBeanDefinitionParser("advice", new TxAdviceBeanDefinitionParser());
    registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
    registerBeanDefinitionParser("jta-transaction-manager", new JtaTransactionManagerBeanDefinitionParser());
    }

    2、在bean初始化的的阶段,解析符合该bean上的事物注解的advisor,通过cglib构造代理bean, 将相应的TransactionIntecepter 设置到这个代理bean中。

    3、在bean的实际调用阶段,通过代理bean来使用。使用的时候,通过TransactionIntecepter ,进行try catch finally 的 提交、回滚操作。

      其中事物实现的技巧,

      1、进入事物拦截器,则将connection设置为非自动提交,在整个事物完成后,再重置connection的提交为自动提交。

      2、在调用方法的时候,通过线程变量,将当前connection加入进去,后续其他方法获取的connection,也从这个线程变量中去取。这样同一个事物中的connection就是使用的同一个。

    这样在提交、回滚的时候,这个连接下的操作就保证了原子性。

    细节分析:

     
  • 相关阅读:
    SQLite Java Wrapper/JDBC Driver(收集)
    JAVA 并行运行(收集)
    log4net使用方法(转载)
    WMI服务故障,VBS脚本无法运行错误
    ArcEngine中UID使用资料收集
    使用 ArcGIS Engine Runtime 制作安装包(转载)
    Eclipse安装WindowBuilder Pro(转载)
    C#操作SQL Server数据库
    自动化测试 (三) Web自动化测试原理
    HTTP协议 (六) 状态码详解
  • 原文地址:https://www.cnblogs.com/chenjfblog/p/13471375.html
Copyright © 2020-2023  润新知