@Transactional标注到interface的方法上,然后事务代理使用CGLIB,事务可以生效么?

发布于 2022-01-07 01:15:09 字数 1066 浏览 772 评论 1

一直以来,都认为该情况事务是不生效的,因为CGLIB基于继承做的代理,需要将@Transactional标注到实现类的方法上才可以,但是最近在一个项目debug的时候发现@Transactional标注在interface方法上,然后通过@Autowired引入该bean,发现其CGLIB代理内部有事务增强,大致如下

public interface TestServicei {
    @Transactional
    String save(String params);
}

@Service
public class TestService implements TestServicei{
    @Override
    public String save(String params){
        System.out.println("save params-->"+params);
        return params;
    }
}

@Controller
public class Test {

    @Autowired
    private TestServicei testServicei;
    @RequestMapping("/test")
    @ResponseBody
    public String test(@RequestParam("params") String params){
        //在此处DEBUG
        return "hashCode:"+testServicei.save(params);
    }
}

DEBUG看到的如下

 

看到这里比较迷惑了,感觉像是有事务增强的,不知道哪里理解错了?求大佬帮忙解惑一下。

环境:Springboot2.0.5  Spring-tx5.1.4 aspectjweaver与aspectjtools为1.5.4

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

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

发布评论

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

评论(1

葬花如无物 2022-01-07 10:51:26

也就是说,该情况下,该注解是可以读取到的,事务是生效的?不知道理解的对不对

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