Spring事务管理者与Spring事务注解--声明式事务
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事务注解--声明式事务的更多相关文章
- 事务管理(下) 配置spring事务管理的几种方式(声明式事务)
配置spring事务管理的几种方式(声明式事务) 概要: Spring对编程式事务的支持与EJB有很大的区别.不像EJB和Java事务API(Java Transaction API, JTA)耦合在 ...
- Spring框架(三) JDBCTemplate,声明式事务,自动装载(注解)
JDBCTemplate 按照标准正常项目的结构 结构图: model层 dao层 实现 dao:(DateBase Access Object) 数据访问对象,dao层只用来访问数据库和模型层 s ...
- 重新学习Spring注解——声明式事务
36.声明式事务-环境搭建 37.声明式事务-测试成功 38.[源码]-声明式事务-源码分析 /** * 声明式事务: * * 环境搭建: * 1.导入相关依赖 * 数据源.数据库驱动.Spring- ...
- spring整合mybatis,ioc容器及声明式事务配置
步骤: 1.创建jdbc.properties文件,用来管理存放连接数据库的相关信息 jdbc.properties:jdbc.user=root jdbc.password=123456 jdbc. ...
- 配置spring事务管理的几种方式(声明式事务)
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...
- SpringBoot 注解事务声明式事务
转载请注明: http://www.cnblogs.com/guozp/articles/7446477.html springboot 对新人来说可能上手比springmvc要快,但是对于各位从sp ...
- 全面分析 Spring 的编程式事务管理及声明式事务管理
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- 全面分析 Spring 的编程式事务管理及声明式事务管理--转
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- Spring之声明式事务
在讲声明式事务之前,先回顾一下基本的编程式事务 编程式事务: //1.获取Connection对象 Connection conn = JDBCUtils.getConnection(); try { ...
随机推荐
- 与子域名共用session信息
参考自 http://www.jb51.net/article/19664.htm 下面的步骤只使用于两个域名在同一个服务起得情况下,如果不在一个服务器上,就需要考虑通过数据库来存储session信息 ...
- WindowsFormsIntegration.dll
WindowsFormsIntegration.dll的位置如下 C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFrame ...
- Java 并发性和多线程
一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...
- .net开发中要注意的事项
1.尽量少用static 当对象被定义为static时,这个对象所占有的内存将不会被回收.有时我们会将经常调用的对象(变量)定义为static,以便提高程序的运行性能.所以,不常用的就不要再定义为st ...
- Objective-C Block
OC中block的语法实在是太别扭了,不知道是不是我太孤陋寡闻了...在此记录一下,以供日后查找使用. 引用:http://goshdarnblocksyntax.com As a local var ...
- Java -- 在Eclipse上使用Hibernate
最近一个项目要用Java做,一点都不熟啊.没办法,只好硬着头皮啃了,花了大半天的时间,终于在Eclipse上完成了第一个Hibernate例子.下面记录关键的步骤,权作笔记,以备日后查看. (1)下载 ...
- Hibernate Validator验证标签说明
Hibernate Validator是JSR-303的一个实现. 在FormBean里添加Hibernate Validator的注解,与定义一个校验类的做法相比.注解更加简洁.灵活. Bean V ...
- 0511 backlog
SCRUM 这次的作业就是确定SCRUM的计划,确定sprint backlog的一个冲刺周期,而这个周期是两个星期.争取在两周内发布1.0版本. 本次作业以网站构建为主: ID NAME ...
- python 练习(一)代码统计工具的实现
最近部门成立了一个python学习小组,旨在让大家在做项目中开始成长起来,于是老大就给布置了第一个小任务:代码统计工具,具体的需求如下: 需求: . 能够统计指定目录下C++程序的代码行数. . C+ ...
- 优化Myeclipse10 Building Workspace速度慢等问题
今天把ext3.0部署到web project很慢很慢,查了一下,这个当笔记.转自http://blog.163.com/jong_cai/blog/static/870280452013111781 ...