1.在Spring的applicationContext.xml中配置事务管理者

PS:具体的说明请看代码中的注释

Xml代码:

    <!-- 声明式事务管理的配置 -->
<!-- 添加事务管理者的bean -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!-- 为事务管理者类中的sessionFactory属性注入一个具体的实例 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!-- 通知的配置 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 指定需要开启并提交事务的方法 -->
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="mod*" propagation="REQUIRED" />
<!-- 指定以上方法除外的方法是只读的 read-only -->
<tx:method name="*" propagation="REQUIRED" read-only="true" />
</tx:attributes>
</tx:advice> <!-- 切面的配置(aop原理这里不多说,我的博文中有详细文章) -->
<aop:config> <!-- 声明一个切入点 -->
<aop:pointcut id="interceptorPointCuts" expression="execution(* app.dao.*.*(..))" /> <!-- 引用一个通知并且同时引用一个需要执行的切入点 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
</aop:config>

1_1.运行项目

程序报错如下:

org.springframework.beans.factory.BeanDefinitionStoreException

原因是缺少jar包{org.aopalliance}

Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor

1_2.添加jar包,将这4个jar包导入到项目的lib目录下

                     

2.使用Spring提供的事务注解

@Transactional [使用事务注解,告诉Spring当前位类中需要事务的开启和提交,注解代码位置可以出现在类定义的前面或者方法上面]

@Transactional(readOnly=true) [使用事务注解,告诉Spring当前方法不需用到事务,只读]

类定义的前面声明事务注解,个别不需用到事务的方法设置为只读

Java代码:

@Transactional
public class BcServiceImpl implements BcService {
@Autowired
private BcDao bd; @Override
@Transactional(readOnly=true)
public List<BookCard> getAllBc() {
// TODO Auto-generated method stub
return bd.getAllBc();
} @Override
public String delSingleBc(Integer cid) {
// TODO Auto-generated method stub
return bd.delSingleBc(cid);
} }

只在方法上声明事务注解,即每个方法上都进行事务注解的声明

Java代码:

public class BcServiceImpl implements BcService {
@Autowired
private BcDao bd; @Override
@Transactional(readOnly=true)
public List<BookCard> getAllBc() {
// TODO Auto-generated method stub
return bd.getAllBc();
} @Override
@Transactional
public String delSingleBc(Integer cid) {
// TODO Auto-generated method stub
return bd.delSingleBc(cid);
} }

2_1.在Spring的applicationContext.xml中,添加一个驱动的bean,事务管理者

【PS:添加事务驱动者的bean后,通知的配置{<tx:advice />}和切面的配置{<aop:config />}都删除掉】

Xml代码:

    <!-- 声明式事务管理的配置 -->
<!-- 添加事务管理者的bean -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!-- 为事务管理者类中的sessionFactory属性注入一个具体的实例 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!-- 添加一个驱动的bean,事务管理者 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

---------------------------------------------------

(over)

Spring事务管理者与Spring事务注解--声明式事务的更多相关文章

  1. 事务管理(下) 配置spring事务管理的几种方式(声明式事务)

    配置spring事务管理的几种方式(声明式事务) 概要: Spring对编程式事务的支持与EJB有很大的区别.不像EJB和Java事务API(Java Transaction API, JTA)耦合在 ...

  2. Spring框架(三) JDBCTemplate,声明式事务,自动装载(注解)

    JDBCTemplate 按照标准正常项目的结构 结构图: model层 dao层 实现  dao:(DateBase Access Object) 数据访问对象,dao层只用来访问数据库和模型层 s ...

  3. 重新学习Spring注解——声明式事务

    36.声明式事务-环境搭建 37.声明式事务-测试成功 38.[源码]-声明式事务-源码分析 /** * 声明式事务: * * 环境搭建: * 1.导入相关依赖 * 数据源.数据库驱动.Spring- ...

  4. spring整合mybatis,ioc容器及声明式事务配置

    步骤: 1.创建jdbc.properties文件,用来管理存放连接数据库的相关信息 jdbc.properties:jdbc.user=root jdbc.password=123456 jdbc. ...

  5. 配置spring事务管理的几种方式(声明式事务)

    Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...

  6. SpringBoot 注解事务声明式事务

    转载请注明: http://www.cnblogs.com/guozp/articles/7446477.html springboot 对新人来说可能上手比springmvc要快,但是对于各位从sp ...

  7. 全面分析 Spring 的编程式事务管理及声明式事务管理

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  8. 全面分析 Spring 的编程式事务管理及声明式事务管理--转

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  9. Spring之声明式事务

    在讲声明式事务之前,先回顾一下基本的编程式事务 编程式事务: //1.获取Connection对象 Connection conn = JDBCUtils.getConnection(); try { ...

随机推荐

  1. Android (二维码)关于java.lang.UnsatisfiedLinkError的小案例

    在许多项目中我们都会用到第三方动态库.so文件,但是往往会引来很多烦恼,比如:Java.lang.UnsatisfiedLinkError - ::-/com.ishow.scan E/Android ...

  2. 【Unity3D基础】让物体动起来①--UGUI鼠标点击移动

    背景 首先还是先声明自己是比较笨的一个人,总是找不到高效的学习方法,目前自己学习Unity3D的方式主要是两种,一种是直接看高质量的源码,另一种是光看不行还要自己动手,自己写一些有代表性的小程序,这也 ...

  3. 0506 Scrum 项目1.0

    团队名称:√3 团队目标:全力完成这次的项目 团队口号:我要改变世界,改变自己!!! 演讲稿:我们的产品 鸡汤精选 是为了解决 当下社会出现的太多的负能量使得人们的内心十分 的痛苦, 他们需要强大的正 ...

  4. TextToSpeech之阅读文字

    创建阅读类 /** * Created by RongGuang on 2014-11-21. * 中文朗读 */ public class ChineseToSpeech { private Tex ...

  5. web前端本地测试方法

    在大型项目中的前端测试与开发,通常使用git clone将整个工程目录下载下来,然后本地运行调试. 然而,当一个项目已经发布到测试机上,需要临时查看某个页面的效果或修改某个页面时,clone整个工程目 ...

  6. Css Study - 纵向Menu - By html and Css

    http://www.wikihow.com/Create-a-Dropdown-Menu-in-HTML-and-CSS HTML <div id="leftmenu"&g ...

  7. Dynamics AX 2012 R2 客制化RDP报表参数对话框

    当我们在使用RDP报表时,AX会根据Data Contract,自动生成报表参数对话框上的字段控件.一般情况下,该对话框能够满足我们的需求,但是如果有较为复杂或特殊的需求,就要我们对该对话框进行客制化 ...

  8. 引用参数,值参数,ref,out

    1,一个参数只有在引用的时候才能改变其值,这是一种情况 2,一个参数在引用后要永久的改变其值(可以用返回参数的形式) 3,多个参数在引用后要永久的改变其值或者多个参数中的部分(返回参数就适合了,因为只 ...

  9. Linq join on 多条件

    var a = from m in DbContext.Set<T1>() join q in DbContext.Set<T2>() on new { m.ID, Phone ...

  10. C#预处理器指令

    在C#中有许多名为“预处理指令”的命令,这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面.例如,使用预处理器指令可以禁止编译器编译代码的某一部分.如果计划发布两个版本的代码,即基本 ...