Discuss / 手写Spring / 循环依赖

循环依赖

Topic source

#1 Created at ... [Delete] [Delete and Lock User]

解决循环以来的creatingName应该在每次执行createBeanAsSingleton()方法中初始化,有逻辑错误

#2 Created at ... [Delete] [Delete and Lock User]

放在createBeanAsSingleton中好像逻辑也不对,但是应该在每次创建新bean时初始化,否则多个bean依赖同一个bean时会有错

蓝天

#3 Created at ... [Delete] [Delete and Lock User]

我一开始也纳闷,debug试了没问题

private Set<String> creatingBeanNames;

creatingBeanNames 看作是正在被创建的Bean的集合

createBeanAsSingleton 有三种入口

1. 创建@Configuration类型的Bean

2. 创建普通的Bean

3. 递归执行

第一种方式必然不会循环依赖

第二种方式在执行前会检查instance是否已赋值,所以不会让creatingBeanNames重复

只有第三者情况,即在递归执行createBeanAsSingleton时,才可能存在重复;如果遇到重复的Bean,说明之前的Bean还没创建完成,也就说明有了循环依赖


  • 1

Reply