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过来;
     */

 

 

posted @ 2017-07-28 22:40  lamsey16  阅读(235)  评论(0编辑  收藏  举报