为什么winform中public form 失效_事务(Transactional)中自调用失效,原来都是动态代理搞得鬼...

前言:在前面的文字中《使用@Transactional遇见的问题,子方法回滚如何让父方法不回滚》,提到了对于静态(static)方法和非public方法,自调用,注解@Transactional是失效的。那么为什么会失效呢?大家都知道到注解@Transaction的底层实现是Spring AOP技术,而Spring AOP技术使用的是动态代理。那我就从代理的自调用说下(这里使用jdk代理)

自己写一个代理

9a64ddea0178bd10182b27b6b5718149.png

代理类

自调用代码

2c3d57267a6846bc745335e0cee7eab9.png

自调用代码

如图:在insertData中调用了insertData2方法。

4a670d44aa6fe2456eb15e65d8d7aac8.png

自调用结果

打印中,只是代理了insertData方法,并没有代理insertData2方法。那么如何才能使insertData2被代理呢。我们可以把代理类拿到。在spring项目中可以通过getBean拿取,也可以通过自动注入拿到。我这里作为演示,就把代理对象传进来了。

12d41b9bf3525369e36cbf843d50e333.png

传入代理类

2582ee32e850833a5d11cb52559db8ed.png

执行结果

可以看到insertData2也被代理了。

总结:在实际开发中,自调用的情况,经常出现,所以在添加事务时,一定要注意下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值