上一篇文章中,银行转账业务没有使用事务,会出现问题,所以这篇文章对上篇文章出现的问题进行修改。

事务 依赖 AOP , AOP需要定义切面, 切面由Advice(通知) 和 PointCut(切点) 组成 !

项目结构图:

aaarticlea/png;base64,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" alt="" />

这个案例和前一篇文章的案例是一样的,我们修改的其实只是ApplicationContext.xml文件,其他代码不会变所以这里就不多做解释了。

直接给出ApplicationContext.xml代码。里面的注释好好看一下。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> -->
<!-- 引入peoperties文件 -->
<!-- <context:property-placeholder location="classpath:db.properties"/> -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:db.properties"/>
</bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"></property>
<property name="user" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean> <bean id="AccountDao" class="cn.itcast.dao.AccountDaoimpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="AccountService" class="cn.itcast.service.AccountServiceimpl"> </bean>
<!-- 第一步:配置事务管理器 -->
<!-- 事务管理器
之前提过的。事务管理器针对不同的持久层有不同的类,比如Spring自带的SpringJdbc,Hibernata等等。这里用的
就是Sping自带的Jdbc,所以这里用的类是DataSourceTransactionManager
-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--
为什么要把dataSource交给transactionManager(事务管理器),
因为事务管理器,需要从数据源获取连接,才能开启事务,提交事务,回滚事务 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--第二步: 配置通知, -->
<!-- 需要通知(Advice),用来对事务增强 。其实advice代表的是环绕前,环绕后要干的事情,
环绕前,环绕后用来干嘛,不就是开启事务,提交事务吗?但是开启事务,提交事务由什么来完成呢?不就是
transactionManager来做。 -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <!-- 接下来配事务的配置属性,为什么要配?这样的话,对什么方法,应用怎样的事务配置就知道了。这些配置信息就会成为TransactionDefinition对象
TransactionDefinition里面有什么还记得吗?
之前的论文提过的有四类:1.以ISOLATION开头的 ISOLATION_* :事务隔离级别
2.PROPAGATION_* 事务的传播行为等四个。 -->
<tx:attributes>
<!--
name 方法名
isolation 隔离级别
propagation 传播行为
timeout 超时时间
read-only 是否只读 (false代表可以更改,true的话代表不能更改) rollback-for 配置一些异常类型,发生这些异常 回滚事务。
no-rollback-for 配置一些异常类型,发生这些异常不 回滚事务。
如果没有配置上面两个,默认发生什么异常都要回滚,
-->
<tx:method name="transfer" isolation="DEFAULT" propagation="REQUIRED" timeout="-1" read-only="false"/>
</tx:attributes>
</tx:advice> <!-- 通知都有了接下来第三步就是配置切面了 -->
<aop:config>
<aop:advisor advice-ref="transactionAdvice" pointcut="execution(* cn.itcast.service.AccountServiceimpl.*(..) )"/> </aop:config> </beans>

执行结果:已经有事务的控制了。要不一起成功要不都不成功。

注意!注意!

Spring事务管理Advice,是基于Spring 传统AOP, 所以使用aop :advisor配置

27Spring_的事务管理_银行转账业务加上事务控制_基于tx.aop进行声明式事务管理的更多相关文章

  1. Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制

    Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制 201311.27 代码下载 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 前言 ...

  2. Spring事务的介绍,以及基于注解@Transactional的声明式事务

    前言 事务是一个非常重要的知识点,前面的文章已经有介绍了关于SpringAOP代理的实现过程:事务管理也是AOP的一个重要的功能. 事务的基本介绍 数据库事务特性: 原子性 一致性 隔离性 持久性 事 ...

  3. Spring AOP实现声明式事务代码分析

    众所周知,Spring的声明式事务是利用AOP手段实现的,所谓"深入一点,你会更快乐",本文试图给出相关代码分析. AOP联盟为增强定义了org.aopalliance.aop.A ...

  4. 实现自己的BeanFactory、AOP以及声明式事务

    实现自己的BeanFactory                                                                   在使用spring时,我们很少用& ...

  5. Spring注解驱动开发(四)-----aop、声明式事务

    AOP 概念 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式:-----基于动态代理 一个aop示例 1.导入aop模块:Spring AOP:(spring-aspects ...

  6. 28Spring_的事务管理_银行转账业务加上事务控制_基于注解进行声明式事务管理

    将applicationContext.xml 和 AccountServiceImpl 给备份一个取名为applicationContext2.xml 和 AccountServiceImpl2.j ...

  7. AOP:声明式事务管理流程

    1. 注册BeanFactoryTransactionAttributeSourceAdvisor @EnableTransactionManagement --> @Import(Transa ...

  8. 阶段3 2.Spring_10.Spring中事务控制_8 spring基于纯注解的声明式事务控制

    新建项目 把之前项目src下的内容全部复制过来 pom.xml内复制过来 开始配置 新建一个config的包,然后再新建配置文件类SpringConfiguration @Configuration这 ...

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

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

随机推荐

  1. Powershell Remove "Limited Access" - 金大昊(jindahao)

    对于有多级web获取getlist会报错:Exception calling “GetList” with “1” argument $SPWeb = Get-SPWeb -Identity http ...

  2. 二叉堆(binary heap)

    堆(heap) 亦被称为:优先队列(priority queue),是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.在队列中,调度程序反复提取队列中第一个作业并运行,因 ...

  3. 【读书笔记】iOS-属性列表

    一,在Cocoa中,有一类名为属性列表的对象,常简写为plist.这些列表包含Cocoa知道如何操作的一组对象.具体来讲,Cocoa如何知道将这们保存在文件中并进行加载.属性列表类包括NSArray, ...

  4. 【读书笔记】iOS-Coco内存管理规则-拥有对象

    一,事件循环.一个典型的图形应用程序往往花费很多时间等待用户操作.在控制程序运行的人非常缓慢地作出决定(例如单击鼠标或按下某个键)以前,程序将一直处于空闲状态.当发生这样的事件时,程序被唤醒并开始工作 ...

  5. iOS-多线程--(pthread/NSThread/GCD/NSOperation)--总结

    零.线程的注意点(掌握) .不要同时开太多的线程(~3条线程即可,不要超过5条) .线程概念 > 主线程 : UI线程,显示.刷新UI界面,处理UI控件的事件 > 子线程 : 后台线程,异 ...

  6. IOS学习资源收集--关于动画的代码学习资源总汇(很棒的动画效果哦)

    目录大纲: 1.很棒的iOS加载动画. github网址:https://github.com/NghiaTranUIT/FeSpinner 游老师的译文blog:http://www.cnblogs ...

  7. win7 解决git clone 连接被拒绝—hosts文件过期

      我出现问题的原因是自己修改过 C:\Windows\System32\drivers\etc\HOSTS, 把同事的这个文件拷贝过来后,一切恢复了正常   错误在eclipse中表现为:     ...

  8. Effective Java 63 Include failure-capture information in detail message

    Principle To capture the failure, the detail message of an exception should contain the values of al ...

  9. 在VS项目中通过GIT生成版本号作为编译版本号

    上一篇博客写了如何在 .Net 项目使用 SVN 作为版本控制工具时生成与代码对应的组件版本号.虽然在公司一直使用 SVN ,但我却对 GIT 情有独钟(可能要归功于那段捣鼓 ROM 的时光),但少有 ...

  10. Semiconnected--强连通缩点

    1451: Semiconnected 时间限制: 1 Sec  内存限制: 32 MB 提交: 79  解决: 20 题目描述 For a directed graph G = (V, E), if ...