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. Dedecms织梦系统修改文章描述字数长度的方法

    1进入数据库修改表: dede_archives, 字段 description  varchar(500): 2 进入织梦后台,找到 系统-->系统基本参数--> 其它选项自动摘要长度( ...

  2. JQuery选择器中含有冒号的ID处理差异的分析

    问题提出 对于一个输入框, 如果其id中含有冒号(:),选择器使用需要有特殊写法, 例如 id为下 <input type="text" value="ddd&qu ...

  3. Cross-site Scripting (XSS) 阅读笔记

    本文源自 https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29 通过阅读和翻译,并按照自己的理解,整理成如下文档. 概述 XSS ...

  4. SpringMVC源码剖析(二)- DispatcherServlet的前世今生

    上一篇文章<SpringMVC源码剖析(一)- 从抽象和接口说起>中,我介绍了一次典型的SpringMVC请求处理过程中,相继粉墨登场的各种核心类和接口.我刻意忽略了源码中的处理细节,只列 ...

  5. 模板 BFS

    [模板]BFS #include <stdio.h> #include <string.h> #include <queue> using namespace st ...

  6. -XX:+TraceClassLoading 监控类的加载

    -XX:+TraceClassLoading –监控类的加载 •[Loaded java.lang.Object from shared objects file] •[Loaded java.io. ...

  7. Url中處理空格、特殊字符

    publicvoid UrlEncodeTest(){    string url ="C++ C#";    Console.WriteLine(HttpUtility.UrlE ...

  8. 为什么要加 -moz- -webkit- -ms- -o- ?

    没有别的,为了兼容早期版本,为了解决CSS3标准正式发布以前的遗留问题.

  9. 使用 highchart 绘制柱状图的通用方法与接口

    本文给出使用 highchart 绘制柱状图的通用方法与接口, 只要指定相应的数据结构和配置, 就可以直接拿来使用. 一.  数据结构与基本接口   一般绘制图形, 会涉及到较复杂的数据结构, 比如使 ...

  10. Linux VFS中write系统调用实现原理【转】

    转自:http://blog.chinaunix.net/uid-28362602-id-3425881.html 目录 用户空间的write函数在内核里面的服务例程为sys_write Vfs_wr ...