一、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对事务的处理