spring声明式事务管理详情解析
前沿:通过对spring事务管理有了比较深入学习,本文将不做实例,而是指定具体的类和配置文件进行讲解。
本文内容:
1、了解什么是声明式事务?
2、声明式事务管理分别有哪几种?
3、这几种事务管理之间的区别是什么?
一、什么是声明式事务?
声明式事务(declarative transaction management)是spring提供的对程序事务管理的方式之一。Spring的声明式事务就是采用声明的方式来处理事务,用在Spring配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要更改事务管理,也只需要在定义的配置文件中修改配置即可,在不需要事务管理的时候,只要在配置文件上修改一下,即可移去事务管理服务,无需改变代码重新编译,这样维护起来极其方便。
由上图可以看出,首先我们需要建立一个新的session.openSession(),其次通过session的getTransaction().begin()方法和getTransaction().commit()方法进行事务创建和事务提交,并且需要关闭session.close(),这样一来我们每次调用这个方法都会重新创建一个新的session,都要反复的做一样的事情,这样就不符合我们的软件工程设计思想,接下来我们使用声明式事务管理方式进行对代码的简化和调整。
1、使用springAOP声明式事务管理。
1.1、我们需要导入aop的几个包:

1.2、然后在application.xml配置文件中进行事务配置: 
1.3、将查询所有数据那个方法进行修改:

经过上面讲解,我们可以看得出对showAllNews()方法的修改,首先我们将原来的openSession()方法改为了getCurrentSession()方法(注:截图有注释说明他们的区别,我就不再重复),并且不需要再手动去创建事务和提交事务,我们的springAOP会自动对事务进行管理、自动的关闭session。
2、使用@Transactional注解方式。
2.1、首先我们需要在application.xml配置文件中进行事务配置(通知Spring容器对注解@Transactional的Bean处理):

2.2、然后在NewsDaoImpl中不需要做任何的操作和修改:

2.3、给NewsServiceImpl添加注解。
在这里我们@Transactional注解可以添加到类上(表示所有的方法都加入事务管理),也可以在具体的方法加上注解 @Transactional,如果是不用对数据进行修改的方法要添加一个属性。
比如:查询所有数据的方法 @Transactional(readOnly=true)

3、使用SpringAOP配置的声明式事务管理跟@Transactional注解的区别:
1)SpringAOP配置声明式事务管理耦合性低,可读性低,表达较详细,灵活性也高。
2)@Transactional注解可读性较高,内容分散不利于统一的管理和维护,耦合性较高。
spring声明式事务管理详情解析的更多相关文章
- Spring声明式事务管理基于@Transactional注解
概述:我们已知道Spring声明式事务管理有两种常用的方式,一种是基于tx/aop命名空间的xml配置文件,另一种则是基于@Transactional 注解. 第一种方式我已在上文为大 ...
- spring 声明式事务管理
简单理解事务: 比如你去ATM机取5000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉5000元钱:然后ATM出5000元钱.这两个步骤必须是要么都执行要么都不执行.如果银行卡扣除了5000块但 ...
- Spring声明式事务管理基于tx/aop命名空间
目的:通过Spring AOP 实现Spring声明式事务管理; Spring支持编程式事务管理和声明式事务管理两种方式. 而声明式事务管理也有两种常用的方式,一种是基于tx/aop命名空间的xml配 ...
- XML方式实现Spring声明式事务管理
1.首先编写一个实体类 public class Dept { private int deptId; private String deptName; public int getDeptId() ...
- Spring声明式事务管理(基于注解方式实现)
----------------------siwuxie095 Spring 声明式事务管理(基于注解方式实现) 以转 ...
- Spring声明式事务管理(基于XML方式实现)
--------------------siwuxie095 Spring 声明式事务管理(基于 XML 方式实现) 以转账为例 ...
- Spring声明式事务管理与配置介绍
转至:http://java.9sssd.com/javafw/art/1215 [摘要]本文介绍Spring声明式事务管理与配置,包括Spring声明式事务配置的五种方式.事务的传播属性(Propa ...
- spring声明式事务管理总结
事务配置 首先在/WEB-INF/applicationContext.xml添加以下内容: <!-- 配置事务管理器 --> <bean id="transactionM ...
- spring 声明式事务管理详解
前言:spring框架对于事务管理提供了两种方案.一,编程式事务.二,声明式事务.本例主要剖析 声明式事务. 何为声明式事务: 通过spring的配置文件配置事务规则,或使用spring @Trans ...
随机推荐
- (转)MapReduce Design Patterns(chapter 3 (part 1))(五)
Chapter 3. Filtering Patterns 本章的模式有一个共同点:不会改变原来的记录.这种模式是找到一个数据的子集,或者更小,例如取前十条,或者很大,例如结果去重.这种过滤器模式跟前 ...
- vue--踩坑
1.通过computed计算属性,计算过的值,假如传递给子组件,在子组件中修改是不起作用的.
- Java多线程编程实战指南(核心篇)读书笔记(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- [置顶]
flume高并发优化——(14)解决空行停止收集数据问题,及offsets变小问题
日志平台运行一段时间,发现日志有部分丢失,通过检查日志,发现有两个问题导致数据丢失,一个是遇到空行后,日志停止收集,还有就是kafka监控offsets时变小,通过分析代码,找到如下方法: 空行问 ...
- 如何看待 Kotlin 成为 Android 官方支持开发语言?
Google IO 2017宣布了 Kotlin 会成为 Android 官方开发语言.一时间朋友圈和Android圈被各种刷屏.当然我也顺势而为发布了一篇的文章<为什么我要改用Kotlin&g ...
- UICollectionView功能使用
UICollectionView在2012年被提出,已经不是什么新技术了,在此只是做一下简单的实现. 集合视图:UICollectionViewUICollectionView和UITableView ...
- 2017年 ACM Journal Latex templates 新模板生成 acmart.cls 文件
假定你的文稿在:/user/acmart-master那么cd /user/acmart-masterlatex acmart.ins最后可得到acmart.cls.
- 3DsMax动画插件
* 简易骨骼动画: Mesh当前帧顶点 = Mesh绑定时顶点 * 绑定时骨骼的变换到本帧骨骼的变换的改变量. = Mesh绑定时顶点 * 绑定时骨骼的变换的逆矩阵 * 本帧的骨骼变换. = Mesh ...
- 每天一个linux命令:【转载】mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- Codeforces 311B Cats Transport【斜率优化DP】
LINK 题目大意 有一些猫,放在一些位置,人一步移动一个位置 给出每个猫出现的时间,每个人可以自由安排其出发时间,沿途已经出现的猫捡起,猫等待的时间是被减去的时间减去出现的时间 猫可以等人,人不能等 ...