You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@Transactional标注的公共方法调用私有方法,事务是否生效?

问题解答:私有方法的数据库查询是否在事务中执行

这段代码完全可行,私有方法mPrivate()里的数据库查询会在mPublic()开启的只读事务中执行。

原因很直接:Spring事务基于动态代理实现,当调用被@Transactional(readOnly = true)标记的公共方法mPublic()时,Spring会通过代理对象在方法执行前开启只读事务。而mPrivate()是在mPublic()内部直接调用的,属于同一个线程内的方法调用,全程处于mPublic()已经开启的事务上下文中,所以里面的数据库操作自然会纳入事务管理。

额外提醒两个关键点:

  • 如果直接调用私有方法(不走被事务注解标记的公共方法入口),那私有方法里的操作不会有事务支持
  • 别给私有方法加@Transactional注解,Spring的动态代理机制不会处理私有方法上的事务注解,加了也是无效的

内容的提问来源于stack exchange,提问作者Pup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:22:00