Aop事务小结(事务管理器和自身构建)

声明市事务是利用AOP来实现的。

1、采用事务管理器AOP:

<!--3、配置事务切面;控制住连接池  -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="comboPooledDataSource"></property>
    </bean>
          2、配置开启基于注解的事务控制
<tx:annotation-driven/>
          3、给事务方法上加注解
@Transactional

2、自身构建AOP

基于注解的AOP

1)对切面类的方法进行配置
2)将切面类和业务逻辑组件都加入到容器
3)告诉SpringIOC容器哪个类是切面类@Aspect
4)开启基于注解的AOP功能

基于XML的AOP

1)对切面类的方法进行配置
2)将切面类和业务逻辑组件都加入到容器
3)告诉SpringIOC容器哪个类是切面类@Aspect

在其他类中本类事务,才会分大小方法的事务特性。

/**
     * 结果:没有任何事务特性;
     *
     * 本类调用本类事务;
     * 1、现象:大方法是默认REQUIRED
     *         小方法两个都设置了REQUIRES_NEW,但是没用
     * 2、现象:大方法是默认REQUIRES_NEW
     *         小方法两个都设置了REQUIRES_NEW,但是没用
     * 3、现象:大方法是默认REQUIRES_NEW
     *         小方法两个都是REQUIRED,还是没用
     *
     * 为什么?怎么调都调整不了一个回滚一个不回滚?
     * MulService{
     *         BookService bs = 代理;
     *         mulTx(){
     *             //代理.方法()
     *             bs.checkout();
     *             bs.updatePrice();
     *         }
     * }
     *
     *
     *  //两个小事务怎么设置都不行,都是一起滚;
     * BookService{
     *         //
     *         hahah(){
     *             //自己方法;把这个方法cv过来
     *             checkout();
     *             //cv进haha
     *             updatePrice();
     *         }
     * }
     *
     * {
     *         hahah(){
    *             int price = bookDao.getPrice(isbn);
                //1、减用户余额
                bookDao.updateBalance(price, username);
                //2、减图书的库存
                bookDao.updateStock(isbn);
                bookDao.updatePrice(isbn);
     *         }
     * }
     * 原因:
     *     所有切入了事务的业务逻辑组件,在ioc容器中保存的是这个组件的代理对象;
     *     本类直接调用本类方法,就相当于是将本类的方法的代码,cv进当前方法里面
     *     现象就是其实只有一个事务,就是hahah();
     *
     * 类编译;
     *     本类方法调用本类方法,相当于将另外一个方法的实现cv过来;
     */
时间: 2024-10-01 10:33:00

Aop事务小结(事务管理器和自身构建)的相关文章

Spring学习8-Spring事务管理(AOP/声明式式事务管理)

一.基础知识普及 声明式事务的事务属性: 一:传播行为 二:隔离级别 三:只读提示 四:事务超时间隔 五:异常:指定除去RuntimeException其他回滚异常.  传播行为: 所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为. spring的事务传播规则: 传播行为 意义 PROPAGATION_REQUIRED 如果当前存在事务,则加入该事务:如果当前没有事务,则创建一个新的事务. PROPAGATION_REQUIR

spring aop 声明式事务管理

Spring使用AOP来完成声明式的事务管理   有annotation和xml两种形式 代码和上一篇基本相近,再贴一遍 两个实体类 package com.ouc.wkp.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity(name = "t_log") public class Log { priva

分布式事务系列(1.1)Spring事务管理器PlatformTransactionManager

1 系列目录 分布式事务系列(开篇)提出疑问和研究过程 分布式事务系列(1.1)Spring事务管理器PlatformTransactionManager源码分析 2 jdbc事务 2.1 例子 public void save(User user) throws SQLException{ Connection conn=jdbcDao.getConnection(); conn.setAutoCommit(false); try { PreparedStatement ps=conn.pre

spring简单事务管理器

事务管理器 <!-- Transaction manager for a single JDBC DataSource -->  <bean id="transactionManager_xyhoa"    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    <property name="dataSource" r

spring的annotation-driven配置事务管理器详解

http://blog.sina.com.cn/s/blog_8f61307b0100ynfb.html 好吧,这个作者也是转载的 ———————————————————————————————————————————————————————————————————————————————————— 这篇文章是我从ITeye上复制来的,看了一遍,觉得很深刻,决定把他复制来,对原作者表示感谢. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[mybatis-spring] Transaction 事务/事务处理/事务管理器

使用mybatis-spring的主要原因之一就是: mybatis-spring允许mybatis参与到spring 事务中. mybatis-spring leverage[use (something) to maximum advantage)] 存在的DataSourceTransactionManager , 而无需为mybatis特意新建一个新的事务管理. 一旦Spring tansaction manager被配置,你可以像配置Spring中的transactions as yo

spring 配置事务管理器

在Spring中数据库事务是通过PlatformTransactionManager进行管理的,jdbcTemplate是不能支持事务的,而能够支持事务的是org.springframework.transaction.support.TransactionTemplate模板,它是Spring所提供的事务管理器的模板 •事务的创建.提交和回滚是通过PlatformTransactionManager接口来完成的. •当事务产生异常时会回滚事务,在默认的实现中所有的异常都会回滚.我们可以通过配置

该伙伴事务管理器已经禁止了它对远程/网络事务的支持

原文地址 简介 当启动分布式的事务涉及 SQL Server 数据库引擎时,需要针对MSDTC进行一些配置.否则可能会出现以下错误:合作伙伴事务管理器已经禁用对远程/网络事务的支持. 解决方案 1.       双方启动MSDTC服务,方式为:命令行下service.msc,选择distributed link trackingclient ,右键启动,并且,右键->属性->启动类型改为手动. 2.       对dtc进行手动设置,方式如下:控制面板->管理工具->在[组件服务]

Spring3.0配置多个事务管理器(即操作多个数据源)的方法

大多数项目只需要一个事务管理器.然而,有些项目为了提高效率.或者有多个完全不同又不相干的数据源,最好用多个事务管理器.机智的Spring的Transactional管理已经考虑到了这一点,首先分别定义多个transactional manager,并为qualifier属性指定不同的值:然后在需要使用@Transactional注解的时候指定TransactionManager的qualifier属性值或者直接使用bean名称.配置和代码使用的例子: <tx:annotation-driven/