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. 与子域名共用session信息

    参考自 http://www.jb51.net/article/19664.htm 下面的步骤只使用于两个域名在同一个服务起得情况下,如果不在一个服务器上,就需要考虑通过数据库来存储session信息 ...

  2. WindowsFormsIntegration.dll

    WindowsFormsIntegration.dll的位置如下 C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFrame ...

  3. Java 并发性和多线程

    一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...

  4. .net开发中要注意的事项

    1.尽量少用static 当对象被定义为static时,这个对象所占有的内存将不会被回收.有时我们会将经常调用的对象(变量)定义为static,以便提高程序的运行性能.所以,不常用的就不要再定义为st ...

  5. Objective-C Block

    OC中block的语法实在是太别扭了,不知道是不是我太孤陋寡闻了...在此记录一下,以供日后查找使用. 引用:http://goshdarnblocksyntax.com As a local var ...

  6. Java -- 在Eclipse上使用Hibernate

    最近一个项目要用Java做,一点都不熟啊.没办法,只好硬着头皮啃了,花了大半天的时间,终于在Eclipse上完成了第一个Hibernate例子.下面记录关键的步骤,权作笔记,以备日后查看. (1)下载 ...

  7. Hibernate Validator验证标签说明

    Hibernate Validator是JSR-303的一个实现. 在FormBean里添加Hibernate Validator的注解,与定义一个校验类的做法相比.注解更加简洁.灵活. Bean V ...

  8. 0511 backlog

    SCRUM 这次的作业就是确定SCRUM的计划,确定sprint backlog的一个冲刺周期,而这个周期是两个星期.争取在两周内发布1.0版本. 本次作业以网站构建为主: ID       NAME ...

  9. python 练习(一)代码统计工具的实现

    最近部门成立了一个python学习小组,旨在让大家在做项目中开始成长起来,于是老大就给布置了第一个小任务:代码统计工具,具体的需求如下: 需求: . 能够统计指定目录下C++程序的代码行数. . C+ ...

  10. 优化Myeclipse10 Building Workspace速度慢等问题

    今天把ext3.0部署到web project很慢很慢,查了一下,这个当笔记.转自http://blog.163.com/jong_cai/blog/static/870280452013111781 ...