service内部方法调用,事务失效的原因是什么

发布于 2022-09-11 22:49:15 字数 609 浏览 16 评论 0

问题描述

addInfo()调用本类方法create(),事务失效,具体原因是什么?
1.调用addInfo()时在该方法上扫描不到事务注解,无法产生对应bean,无法产生代理,aop失效.也就是说,调用没有事务注解的方法addInfo()不会产生代理,controller可以通过spring生成的单例bean直接调用service无事务方法addInfo(),如果controller调用有事务注解的create(),会根据aop生成相应代理类,事务才生效
2.只要是通过controller调用service,不论service方法有无事务注解,都会生成代理,addInfo()调用create(),是this.create(),不通过controller调用,事务失效
这两种解释哪种对?还是都不对?spring是根据什么生成代理的?那个注解还是其他什么?

相关代码

@Service
public class TestServiceImpl implements TestService {

public void addInfo(){
    create();
}

@Transactional
public void create(){

}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

初见 2022-09-18 22:49:15

因为addInfo()上没有事务,而addInfo调用create()的时候是类内部调用,没有走代理类,也就没有事务切面

原谅我要高飞 2022-09-18 22:49:15

事务是基于AOP实现的,AOP默认用代理实现
外部调用会走代理逻辑,所以有切面,有事务
内部调用不走代理逻辑,所以没切面,没事务

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文