事务对于我们来讲不并陌生,也是在实际应用中一直都在使用。在JDBC中,事务大致的使用结构如下:

开启事务

业务逻辑处理

提交事务

Spring只是对事务进行了扩展和封装使用,现在看看在内部它是如何工作的。

1. PlatformTransactionManager
PlatformTransactionManager是一个接口,它定义的方法如下:

 // 获取事务
TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
// 提交事务
void commit(TransactionStatus status) throws TransactionException;
// 回滚事务
void rollback(TransactionStatus status) throws TransactionException;

看到这个类的定义,基本上对事务的功能有一个初步的掌握,完全就是平时写事务步骤的关键方法啊!

2. AbstractPlatformTransactionManager
AbstractPlatformTransactionManager它实现了PlatformTransactionManager接口。但是这个抽象类只是定义了一个骨架,抽象出
doBegin(),doCommit(),doRollback()这三个抽象方法让子类去实现。

3. DataSourceTransactionManager
DataSourceTransactionManager是JDBC事务的实现类,它继承了AbstractPlatformTransactionManager类,并实现了doBegin(),doCommit(),doRollback()这三个关键的方法。

DataSourceTransactionManager有一个成员是DataSource,在事务配置时,要传这个属性过去。

doBegin() 中有一个关键的代码:con.setAutoCommit(false);
doCommit() 中有一个关键的代码:con.commit();
doRollback() 中有一个关键的代码:con.rollback();
看到这里,有没有很熟悉的感觉呢?!

4. TransactionTemplate
TransactionTemplate是手动事务编程的模板类,它是如何来完成的呢?它有一个重要的方法:execute()方法,它里面定义了事务操作的基本骨架,剔除一些异常处理的代码,看看最关键的代码并作注释。

public <T> T execute(TransactionCallback<T> action) throws TransactionException {
// 这里主要调用了doBegin()方法
TransactionStatus status = this.transactionManager.getTransaction(this);
T result;
try {
// 回调子类中的具体实现逻辑,处理业务逻辑
result = action.doInTransaction(status);
}catch(Exception e){
// 调用doRollback()方法
rollbackOnException(status, ex);
}
// 调用doCommit()方法
this.transactionManager.commit(status);
return result;
}

看完了应该明白了模板方法在它里面的应用了吧。

模板方法在Spring事务中的应用的更多相关文章

  1. Spring 事务中 readOnly 的解释

      spring 中事务的PROPAGATION_REQUIRED,Readonly的解释  (2012-11-21 16:29:38) 转载▼ 标签:  杂谈                  一. ...

  2. spring事务中隔离级别和spring的事务传播机制

    Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一般就不做了,要么做完,要 么就不做.也就是说,事务必须是 ...

  3. spring事务中出现oracle游标溢出的解决方案

    本例事务中大量查询SQL语句,会导致oracle游标溢出:对于数据库游标出现解决方案:1.大量查询SQL语句取消事务,只针对插入/更新 做事务处理2.用临时表代替大量查询SQL语句推荐使用第二种方案

  4. Spring事务中的readonly

    来源:https://www.cnblogs.com/straybirds/p/9147892.html Spring的事务经常会有这样的配置: <tx:method name="se ...

  5. 【spring源码学习】spring事务中的嵌套事务中的保存点相关知识

    JDBC事务保存点(setSavepoint, releaseSavepoint )实例 以下是使用事务教程中描述的setSavepoint和回滚的代码示例. 此示例代码是基于前面章节中完成的环境和数 ...

  6. Spring事务中的隔离级别

    TransactionDefinition接口中定义了五个表示隔离级别的常量: TransactionDefinition.ISOLATION_DEFAULT:使用后端数据库默认的隔离界别,MySQL ...

  7. Spring事务中的事务传播行为

    1.支持当前事务: TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务:如果当前没有事务,则创建一个新的事务. Transaction ...

  8. spring事务传播机制实例讲解

    http://kingj.iteye.com/blog/1680350   spring事务传播机制实例讲解 博客分类:   spring java历险     天温习spring的事务处理机制,总结 ...

  9. 结合ThreadLocal来看spring事务源码,感受下清泉般的洗涤!

    在我的博客spring事务源码解析中,提到了一个很关键的点:将connection绑定到当前线程来保证这个线程中的数据库操作用的是同一个connection.但是没有细致的讲到如何绑定,以及为什么这么 ...

随机推荐

  1. android 动态改变控件位置和大小 .

    动态改变控件位置的方法: setPadding()的方法更改布局位置. 如我要把Imageview下移200px:             ImageView.setPadding( ImageVie ...

  2. 制作自动化系统安装U盘

    1.挂载CentOS6.6镜像 [root@test88 ~]# mkdir /application/tools -p [root@test88 ~]# cd /application/tools/ ...

  3. Maven如何发布项目到一个Tomcat中

    首先,在本地tomcat的conf/tomcat-users.xml 中配置一个user,准备让maven接入时使用: <role rolename="admin-gui"/ ...

  4. hdu 1849(巴什博弈)

    Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. Reflow(回流)和Repaint(重绘) (转)

    原文地址:http://blog.csdn.net/qq_18826911/article/details/68924255 首先我们要明白的是,页面的显示过程分为以下几个阶段: 1.生成DOM树(包 ...

  6. GLASNICI 解题报告

    GLASNICI 解题报告 题目描述 有N个人在一直线上,第i个人的位置为Di,满足Di≤Di+1.最初只有第1个人(在最左边)知道消息. 在任意时刻,每个人可以以每秒1单位的速度向左或向右移动,或者 ...

  7. 洛谷 P1469 找筷子 题解

    题目传送门 先排序一遍,再一个一个判断是否有偶数个.注意for循环要i+=2. #include<bits/stdc++.h> using namespace std; ]; int ma ...

  8. 一次压力测试Loadrunner经验分享

    一次压力测试Loadrunner经验分享 http://blog.csdn.net/lxlmj/article/category/553431 loadrunner测试socketstcpserver ...

  9. SSH整合最简单的一个例子

    1.新建mysql数据库   create database spring; 切换数据库 use spring; 新建表 create table user (id int(3) auto_incre ...

  10. Android之 广播

    (以下内容是阅读郭霖大神的<第一行代码>后自己总结的) 1.概述 广播是Android的四大组件之一. Android的广播机制十分灵活. 2.发送广播 如上图Android的广播主要分为 ...