黄晓童SPRING学习笔记:Spring的事务管理

Spring的定义
对DI的初步理解
对AOP的初步理解
对DI的深入探究
对AOP的深入探究
Spring的事务管理
Spring MVC

首先来说一些概念性的东西,就是事务的的ACID属性:
原子性:事务中的操作要么都发生要么都不发生;
一致性:事物一旦结束了,数据不应当被破坏;
隔离性:一个用户的操作不能和其他用户的操作相混淆;
持久性:一旦事务完成,应当被持久化。

 spring是不直接管理事务的,而是交给事务管理器。所有的spring事务管理器都是实现自PlatformTransactionManager接口的,比如,hibernate的事务管理器为HibernateTransactionManager类、JDBC或iBatis的事务管理器是DataSourceTransactionManager类等等。这里就不一一列举了,用到的话可以去查资料。下面给出了JDBC事务管理器的配置的例子:


 

 

 下面我们就尝试用spring的TransactionTemplate方式编写一个事务,TransactionTemplate是通过一种叫做回叫机制的实现的。

public  void  youMethodName()        //要加入事务管理的方法的名字
{
 transactionTemplate.execute
 (
  new  TransactionCallback()
  {
   public  Object  doInTransaction( TransactionStatus  ts )
   {
    try
    {
     ………            //这里写原来的业务逻辑代码
    }
    catch( Exception e )
    {
     ts.setRollbackOnly();
    }
    
    return  null;
   }
  }
 )
}

 

 当然,在这个类的youMethodName方法中使用的transactionTemplate是需要被注入进来的。像如下这样:(其中飘红的依赖可以是上面说到的任何一种spring事务管理器。)


 
  
   < property  name=” transactionManager”  ref=” transactionManager”  />
  
 

 

 下面来说一下spring的声明式事务。spring的声明式事务共有三种:一种是基于aop代理bean的方式;一种是基于简单的xml声明的tx命名空间的方式;最后一种是注释驱动事务。先来说一下spring定义事务的几个参数:传播行为、隔离级别、只读、事务超时、回滚规则。下面定义的是第一种声明式事务(基于aop代理bean的方式):






 
  
  

 

 上面的transactionManager可以是前面提到的任何一种spring事务管理器。而transactionAttributes属性则是指明了事务的具体参数。它含有一个props集,该集含有N个prop属性,每个的键是一个方法名称的模式,而其具体指则是事务的具体参数。其中事务的具体参数的顺序为:传播行为(必选)、隔离级别(可选)、是否只读(可选)、回滚规则(可选),他们之间以逗号隔开。

下面的则是以tx命名空间声明的事务:






 

 其中“transaction-manager”指明了spring的事务管理器,则类似前面提到的。省略号部分的属性名包括:isolation(事务隔离级别)、no-rollback-for(哪些异常事务是不需要回滚的)、propagation(事务的传播规则)、read-only(是否只读)、rollback-for(哪些异常应该回滚事务)、timeout(超时时间)。当然,这只是事务通知,我们还没有定义哪些bean应该被通知。


 

 

 最后一种实现spring事务的方式是注释驱动的方式。在类或接口中都可以使用。只需要加上@Transactional(......)即可,括号里加上具体的事务参数。当然,配置文件中要加上如下代码:

 

你可能感兴趣的:(JAVA知识之SPRING,Spring,配置管理,Bean,AOP,iBATIS)