5. Spring - 循环依赖解决
2021-04-09 02:35:08 0 举报
登录查看完整内容
Spring循环依赖解决流程,基于三级缓存
作者其他创作
大纲/内容
找到要注入的字段a的实例
remove -> ( a -> factory )
remove
A
put
doGetBean(a)
调用Bean的初始化方法
二级缓存Map -> earlySingletonObjectsa -> obj
由该BeanPostProcessor完成注入
getSingleton(a)
createBeanInstance -> a
remove -> ( a -> obj )
earlySingletonObjects.put
假设A依赖A基于AnnotationConfigApplicationContext
Set -> registeredSingletons
BeanPostProcessor.before
BeanPostProcessor.after
发生依赖注入
doCreateBean(a)
null = singletonObjects.get()objFactory.getObject()
三级缓存Map -> singletonFactoriesa -> factory
1. 单例Map获取Bean
postProcessPropertiesinject
InstantiationAwareBeanPostProcessorAutowiredAnnotationBeanPostProcessor
getSingleton(a)this.alreadyCreated.add(a)
二级缓存Map -> earlySingletonObjects
一级缓存Map -> singletonObjectsa -> obj
三级缓存Map -> singletonFactories
一级缓存Map -> singletonObjects
add
descriptor.resolveCandidatebeanFactory.getBean(a)
状态变化 - 1
一般动态代理的时机,在这里创建代理对象
getEarlyBeanReferencereturn a
beanFactory.resolveDependency
这里完成了循环依赖的注入
get(a)
状态变化 - 3
ObjectFactory
回调
earlySingletonObjects.get
容器提前创建单例Bean
getBean
开始Bean的初始化
doGetBean
状态变化 - 2
invokeInitMethods
获取依赖的A
doResolveDependencyreturn a
singletonFactories.remove
0 条评论
回复 删除
下一页