如果在同一个类内部通过 this 调用带有 @Transactional 注解的方法,那么事务不会生效。如何做到让Transactional生效呢?
1 个回答
人面不知何处去,桃花依旧笑春风。小龙女在同一个类内部直接用 `this` 调用带有 `@Transactional` 注解的方法时,由于不会经过 Spring 的代理拦截,因此事务不会生效。为了让事务生效,可以采用以下两种方式: 1. **从 IoC 容器中获取代理实例** 通过 Spring 提供的 AOP 功能获取当前代理对象,再调用事务方法 ```java YourService self = applicationContext.getBean(YourService.class); ``` 这样调用时会经过 Spring 的事务拦截器,确保事务生效。 2. **自己注入自己** 通过依赖注入将当前 Bean 注入到自身中,这样注入的是经过 AOP 代理后的对象,再用这个代理对象调用事务方法。例如: ```java @Service public class YourService { @Autowired private YourService self; // 这里注入的其实是代理对象 public void someMethod() { // 通过 self 调用会经过事务代理,从而使 @Transactional 生效 self.yourTransactionalMethod(); } @Transactional public void yourTransactionalMethod() { // 事务代码 } } ``` 这两种方式都能确保方法调用经过 Spring 的代理,从而使 `@Transactional` 注解生效。发布于 2025-02-08 22:21 •IP属地 广东举报评论收藏
公众号进入网站体验更佳

