源码Spring循环依赖流程图
2021-10-22 06:17:08 0 举报
源码Spring循环依赖流程图
作者其他创作
大纲/内容
DefaultSingletonBeanRegistry
beforeSingletonCreation(beanName)条件判断里标记B正在创建
beforeSingletonCreation(beanName)条件判断里标记A正在创建
autowireByName依赖注入A
将工厂B放入三级缓存
一级缓存中A为空且有正在创建标记,此时命中循环依赖,把A放到二级缓存,从三级缓存移除
AbstractBeanFactory
doGetBean A
一级缓存B为空且未有正在创建标记,说明没命中循环依赖
getBean
顺序:黑色->蓝色->绿色->橙色
一级缓存中A为空且未有正在创建标记,说明没命中循环依赖
移除B二级三级缓存放入一级
完成
refresh
autowireByName依赖注入B
初始化B: initializeBean
getSingleton(beanName)
初始化A: initializeBean
移除A二级三级缓存放入一级
earlySingletonExposure单例&允许循环依赖&创建中
A:populateBean
BeanFactory
B:populateBean
ClassPathXmlApplicationContext
addSingleton
尝试从一级缓存中拿A:singletonObjects
afterSingletonCreation移除B创建中标识
完成B的注入
尝试从一级缓存中拿B:singletonObjects
初始化剩余的单例finishBeanFactoryInitialization
AbstractApplicationContext
A和B都需要代理且相互依赖
将工厂A放入三级缓存
afterSingletonCreation移除A创建中标识
从三级缓存中拿到工厂A
doGetBean才是真正向IoC容器获取被管理Bean的过程
doGetBean B
AbstractAutowireCapableBeanFactory
0 条评论
下一页