循环依赖导致编译或者服务启动报错问题:The dependencies of some of the beans in the application context form a cycle

发布时间 2023-05-29 10:30:17作者: 小年的西瓜

错误如图:

 我的是服务器启动服务时报错:


***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle

报错原因:

两个类相互引用对方,导致Spring在初始化bean的时候不知道先初始化哪个,从而形成循环依赖注入。

解决方法:
1、其中一个不要引用对方,避免循环依赖

2、任选其中一个使用@Lazy 注解。

Spring在应用程序上下文启动时去创建所有的单例bean对象, 而@Lazy注解可以延迟加载bean对象,即在使用时才去初始化.

所以,@Lazy注解, 一是可以减少Spring的IOC容器启动时的加载时间, 二是可以解决bean的循环依赖问题,如图:

  我使用的是这个注解,最后,搞定!

3、使用mapper对象去调用API的方式。
一般情况下,mapper类都是被service引用的,而mapper不会引用service。
当然,这个仅仅行为习惯上的的一个规范,并不是必须,不排除有人在mapper类里面引用service对象,那这样就还是可能会有循环依赖的问题。
所以,这个方案不优先建议,仅作为规范编码的基础上的参考方案。