基于前文对 Spring 事务传播机制、@Transactional 注解配置及“自调用失效”陷阱的讨论,判断一个方法是否真正被事务覆盖(即 AOP 代理是否生效),不能仅看代码中是否有注解,需从运行时行为和底层原理两个维度进行验证。
一、运行时验证(最准确)
1. 检查代理对象类型
在调用该方法的服务类中,注入自身或打印当前对象,观察其类型:
JDK 动态代理:对象类型为ProxyXXX。CGLIB代理:对象类型为ClassNameProxyXXX。 CGLIB 代理:对象类型为 ClassNameProxyXX