zoukankan      html  css  js  c++  java
  • 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过来;
         */
  • 相关阅读:
    splinter webdriver API 的基本实现
    201253 线程和进程的区别
    Winform中的默认图片
    [收藏】正确使用SqlConnection对象,兼谈数据库连接池
    手机相关的基础名称
    常见排序
    SIP相关内容
    How to set the WIFI configuration
    本地化的设置和读取
    Serialize And Deserialize Binary Tree
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/7252919.html
Copyright © 2011-2022 走看看