Spring Bean的循环依赖 The dependencies of some of the beans in the application context form a cycle
程序员文章站
2022-06-26 12:54:34
...
***************************
APPLICATION FAILED TO START
***************************
Description:
The dependencies of some of the beans in the application context form a cycle:
aServiceImpl defined in URL [D:\CODE\Java\IdeaProjects\test\AService.class]
┌─────┐
| bServiceImpl defined in URL [D:\CODE\Java\IdeaProjects\test\BService.class]
↑ ↓
| cServiceImpl defined in URL [D:\CODE\Java\IdeaProjects\test\CService.class]
└─────┘
Spring Bean的循环依赖是指,类A需要通过构造函数注入的类B的实例(或者B中声明的Bean),而类B需要通过构造函数注入的类A的实例(或者A中声明的Bean)。如果将类A和类B的bean配置为相互注入,则Spring IoC容器会在运行时检测到此循环引用,并引发一个BeanCurrentlyInCreationException
。与典型情况(没有循环依赖)不同,bean A和bean B之间的循环依赖关系迫使其中一个bean在被完全初始化之前被注入到另一个bean中。
解决方案
@Autowire配合@Lazy懒加载使用
@Lazy
@Autowired
public BServiceImpl() 构造函数