spring Aop 事务控制

3 篇文章 0 订阅
做开发几年了,一直也没搞清楚spring的事务传播性怎么回事,用的不太到位,经常出问题,最近在架构师课程上又学习到了这个地方,正好我们现在做的项目也用到了.


public class ServiceA{

private ServiceB b;

void a(){
b.b3();
}

}


public class ServiceB{

void b1();
void b2();

void b3(){
b1();
b2();
}

}

假如传播性是 REQUIRED_NEW ,ServiceA,ServiceB 的 里面的方法都符合spring的切点规则,那么在调用 a() 的时候spring 容器会创建几个事务? 答案是2个. 在调用a()的时候一个,b.b3()此时又一个,虽然 b1(),b2()也符合切点规则但spring不会为他们2个启动新的事务.原因我们要从AOP的实现原理上来分析.
我们说AOP是在IOC的基础上出来的,没有IOC其实就没有AOP.spring 是利用代理来完成事务控制的.
// 这里假设是cglib代理
public class ServiceAProxy extends ServiceA{

private ServiceA svcA;

void a(){
begin transaction
svcA.a();
end transaction
}

}

public class ServiceBProxy extends ServiceB {

private ServiceB svcB;

void b1(){
begin transaction
svcB.b1();
end transaction
}
void b2(){
begin transaction
svcB.b2();
end transaction
}

void b3(){
begin transaction
svcB.b3();
end transaction
}

}


这样在调用a.a()时 只调用了A的代理方法a() 和 b的代理方法 b3(),所以只开启了2个事务.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值