• spring 事物系列(一) 事物的基本使用


    一、使用方法

    1、通过在xml中进行配置

    //注入事物管理器  
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataSource"/>
    </bean>
    
    //通过spring的驱动解析标签,将事物后置处理器加入到beanPostProcessor列表中去,
    //这样后续spring容器对bean完成初始化后,则会调用该事物后置处理器,
    //该事物管理器则会判断bean所包含的方法或方法所在的类是否符合事物拦截的特征,
    //然后会将驱动一并注入的事物advisor包装到bean中去,返回一个被事物代理过的bean。
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
    

    2、通过在方法上加@Transaction,对方法进行拦截处理。

    这样被拦截的方法则被TransactionIncepter所包装,伪代码如下所示
    try{
      methodInvocation.invoke();
    }
    catch(RunException e){
      roolback();
    }
    finally{
      releaseResource();
    }
    commit();

    二、使用注意项

    1、被代理的方法必须是public,除非在注册事物拦截器时指定可以使用非public的方法修饰符。

    2、调用被@Transaction装饰的方法时,不能是方法内部的调用,必须是被spring管理的对象来调用这个方法。

    如下所示,调用b方法时,是直接走的Test这个对象的方法的引用,而不是被spring管理生成的代理类Test#Proxy的引用,导致事物拦截器没有执行的挂载点。

    @Componet
    public class Test{
    
      public void a(){
         b.();
      }
    
      @Transaction
      public void b(){
         insert();
         update();
      }
    
    }

    这种情况,可以通过1、将b方法写到其他注入bean中去。2、通过spring容器获取这个Test类的bean,然后进行调用。 

    spring 事物系列

    spring 事物系列(一) 事物的基本使用

    spring 事物系列(二) 事物的进阶使用

    spring 事物系列(三) 事物的原理及源码分析

    spring 事物系列(四) 事物在多数据源环境下的改造

  • 相关阅读:
    Redis 详解 (一) StackExchange.Redis Client
    redis在.net架构中的应用(1)--利用servicestack连接redis
    .NET中使用Redis:http://www.cnblogs.com/yangecnu/p/Introduct-Redis-in-DotNET.html
    SQL Server日期函数总结
    SQL Server 日期和时间函数
    16Aspx源码论坛
    方差和偏差的区别
    写在中秋节的前?秒
    装系统那些事儿-1-电脑的启动流程
    查找重复的数
  • 原文地址:https://www.cnblogs.com/chenjfblog/p/13553049.html
Copyright © 2020-2023  润新知