博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板方法在Spring事务中的应用
阅读量:6814 次
发布时间:2019-06-26

本文共 1782 字,大约阅读时间需要 5 分钟。

事务对于我们来讲不并陌生,也是在实际应用中一直都在使用。在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 execute(TransactionCallback
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; }

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

分类:
+加关注
0
0
上一篇:
下一篇:
posted @ 2017-02-28 13:39 阅读( 154) 评论( 0)
 
(评论功能已被禁用)
最新IT新闻:
·
·
·
·
·
»
最新知识库文章:
·
·
·
·
·
»
历史上的今天:
2015-02-28

公告

本文转自 博客园博客,原文链接: ,如需转载请自行联系原作者
 
 
你可能感兴趣的文章
在8086中,[ idata],[bx]表示内存单元时。可能是一个字节,也可能是一个字。
查看>>
【MPI】并行奇偶交换排序
查看>>
并发编程之线程
查看>>
python开发部署时新增数据库中表的方法
查看>>
参加2018之江杯全球人工智能大赛 :视频识别&问答(四)
查看>>
阿里云跨地域访问私网
查看>>
通过angularJS官方案例快速入门
查看>>
Introduction of OpenCascade Foundation Classes
查看>>
Surface Normal Vector in OpenCascade
查看>>
Educational Codeforces Round 38 (Rated for Div. 2)
查看>>
内部类初识
查看>>
【python3的学习之路一】输入和输出
查看>>
在Eclipse中生成接口的JUnit测试类
查看>>
Oracle SQL常用内置系统函数总结
查看>>
[POJ] #1005# I Think I Need a Houseboat : 浮点数运算
查看>>
西湖论剑WP
查看>>
数组Array,集合List与字符串String,整形int的get类方法。
查看>>
【转】浏览器内核
查看>>
面试题:查找旋转数组中的某一元素
查看>>
uva12298(生成函数)
查看>>