service的自调用 VS service之间调用

一、seervice的自调用:

    public interface AService {  
        public void a;  
        public void b;  
    }  
       
    @Service  
    public class AServiceImpl1 implements AService{  
        @Transactional(propagation = Propagation.REQUIRED)  
        public void a {  
 this.b;  
        }  
        @Transactional(propagation = Propagation.REQUIRES_NEW)  
        public void b {  
        }  
    }  

如上,为在一个对象,service里面自调用(自己方法调自己的方法),这样的情况,this.b是不会事务增强的。可以参考我的另一篇博客 spring doc 学习 之 事务篇 。spring文档有说到过,必须外部调用才会事务增强。

原因就是:this.b,这里的this就是当前对象,而非proxy对象,当然没有事务增强了。

也可以参考这个博客 http://blog.csdn.net/wxwzy738/article/details/27566645

二、service之间的调用:

ServiceA {   
       
       
     void methodA {   
         ServiceB.methodB;   
     }   
  
}   
  
ServiceB {   
       
         
     void methodB {   
     }   
       
}      

这种情况,因为都是外部调用,都会开启事务,并且依据事务传播特性,会传播到B方法。

总结,这两种情况有点像,要区分对待。可以加深理解aop对事务的处理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值