东东
发布于 2025-03-11 / 1 阅读 / 0 评论 / 0 点赞

注解式事务失效场景

Spring注解式事务失效的场景

今天面试遇到了这样一道题,有点紧张没想起来

先整理下以前记忆中遇到的

方法内自调用

标题可能说的比较笼统,spring在控制反转和依赖注入后,使用的其实是代理对象。举个例子

比如 controller 中有一个接口,

他收到请求需要调用 aService 中的 a 方法,a 方法本身没有事务注解

然后a方法内部又调用aService中的 b方法 ,b 方法是注解了事务,

这个时候如果b抛出了异常,按照期望,应该是事务回滚才对,但是实际上却失效了。

这个原因是因为,我们在controller中注入了 aService ,这个时候调用 方法 a的时候,实际用的是aService 的代理对象来调用的。然后在 a 内部调用了 b 的时候,其实用的是实际的 aService 对象,事务就会出现失效。

解决

这种情况可以将接口放到另外的一个类,然后在aService 中再注入这个新的类,然后再用代理对象去调用

带private的方法

方法内单独开了线程