【Spring循环依赖报错】The dependencies of some of the beans in the application context form a cycle

  行业动态     |      2024-01-31 11:04

【Spring循环依赖报错】The dependencies of some of the beans in the application context form a cycle


一、报错信息


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

Description:

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

   categoryController (field private com.vector.service.ICategoryService com.vector.controller.CategoryController.ICategoryService)
      ↓
   categoryService (field private com.vector.service.IArticleService com.vector.service.impl.CategoryServiceImpl.articleService)
┌─────┐
|  articleServiceImpl (field private com.vector.service.IUserService com.vector.service.impl.ArticleServiceImpl.iUserService)
↑     ↓
|  userServiceImpl (field private com.vector.service.IArticleService com.vector.service.impl.UserServiceImpl.iarticleService)
└─────┘




二、分析原因

       类A需要通过构造函数注入的类B的实例(或者B中声明的Bean),而类B需要通过构造函数注入的类A的实例(或者A中声明的Bean),导致循环依赖注入。


三、解决方案

解决方案一

其中一个不要引用对方,避免循环依赖,代码解耦肯定是最优解。

解决方案二

选择其中一个使用@Lazy 注解。

 @Autowired
 @Lazy
 private IArticleService articleService;

       延迟互相依赖的其中一个bean的加载,从而解决Spring在初始化bean的时候不知道先初始化哪个的问题。