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. GitLab + Jenkins + Docker + Kubernetes。

    目前方案是GitLab + Jenkins + Docker + Kubernetes. 方案的工作流程如下:首先,开发人员提交代码代码提交:随后,GitLab 会自动触发Jenkins job,Je ...

  2. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  3. 用 python 实现一个多线程网页下载器

    今天上来分享一下昨天实现的一个多线程网页下载器. 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据.把它放上来也是想大家帮忙挑刺,找找 bug,让它工作得更好. k ...

  4. StringByAppendingPathComponent和stringByAppendingString的区别

    cyy:自我理解,不保证正确,但亲自试验确实可行:若用 stringByAppendingString  则需要手动在名称前加 “/”符号,而stringByAppendingPathComponen ...

  5. Python 模块,数据类型,元组

    模块 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的. s ...

  6. Sring控制反转(Inversion of Control,Ioc)也被称为依赖注入(Dependency Injection,DI)原理用反射和代理实现

    首先我有一个数据访问层接口: public interface StudentDao { void save(Student stu); } 和实现类: 1.mysql实现类 public class ...

  7. SQL Server数据库性能优化(三)之 硬件瓶颈分析

    参考文献 http://isky000.com/database/mysql-performance-tuning-hardware 由于对DBA 工作了解不多    所以只从网上简单的看了下  硬件 ...

  8. 十九、Java基础--------IO流之字节流

    在上一篇文章中介绍了IO体系以及一些基本概念和字符流的相关应用,本文着重介绍字节流的相关操作. 字节流 它的操作与字符流类似,可以参与字符流的定义.读取.写入.处理异常的格式,只不过是处理的数据不同, ...

  9. 使用规则引擎Drools计算圆周率PI

    实际上是使用规则引擎能够更新工作内存区重新匹配规则实现迭代功能. 使用了策略模式实现. <规则引擎与RETE算法介绍> PPT : http://files.cnblogs.com/lov ...

  10. 使用percona-toolkit校验主从数据的一致性

    主从数据校验使用percona-toolkit工具集的以下两个工具(主库上使用): pt-table-checksum  #检查主从数据是否一致, pt-table-sync #把主库数据同步到从库 ...