最近开发的时候,遇到一个 @Transactional注解失效的问题。
场景是:方法A和方法B都在同一个类里,方法A没有 @Transactional注解,方法B有 @Transactional注解,A方法调用B方法,结果事务一直没生效,debug日志说是事务没有被spring管理。后面研究好久发现了原因:这是由于Spring AOP代理的原因造成的,因为只有当 @Transactional 注解的方法在类以外被调用的时候,Spring 事务管理才生效。 解决办法就是避免同一类中自调用或者使用 AspectJ 取代 Spring AOP 代理。于是我新建了一个类,将方法B写在新类里,问题就解决了。