欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 同一对象内方法互调事物失效问题解决

同一对象内方法互调事物失效问题解决

2025/2/24 6:32:26 来源:https://blog.csdn.net/qq_42764269/article/details/144539686  浏览:    关键词:同一对象内方法互调事物失效问题解决

问题

如下:当在其他对象中调用a方法时,b方法和c方法上标注的事物是失效的,即b方法和c方法上有没有@Transactional是一样的效果的,都不会生效。b方法和c方法是否有事物只看a方法上是否有事物。若a方式上有事物,则b方法和c方法有事物,否则b方法和c方法没有事物。

public AService {public void a(){......b();c();}@Transactionalpublic void b(){......}@Transactionalpublic void c(){......}
}

解决

1、方法一

将这些方法拆分为多个对象

@RequiredArgsConstructor
public AService {private final BService bService;private final CService cService;@Transactionalpublic void a(){......bService.b();cService.c();}}public BService {@Transactionalpublic void b(){......}
}public CService {@Transactionalpublic void c(){......}
}

2、方法二

1、引入aop-starter

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2、开启aspectj动态代理功能,让所以的动态代理都是aspectj,并对外暴露代理对象。

在启动类上添加@EnableAspectJAutoProxy(exposeProxy = true)

3、本类调用有代理对象来调


public AService {public void a(){......AService aService = (AService) AopContext.currentProxy();aService.b();aService.c();}@Transactionalpublic void b(){......}@Transactionalpublic void c(){......}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词