spring循环依赖
2021-08-17 10:55:44 22 举报
spring循环依赖执行流程
作者其他创作
大纲/内容
尝试获取a对象getBean(a)
返回已经完成初始化的b对象
创建一个ClassPathXmlApplicationContext
创建b
尝试去缓存中获取,结果为nullgetSingleton(b);
将属性应用到bean中,也就是将xml中的属性注入span style=\"font-size: inherit;\
尝试获取b对象getBean(b)
获取工厂中的a getObjectForBeanInstance(a);
获取到a实例的引用singletonObject = singletonFactory.getObject();
正儿八经的开始创建bean preInstantiateSingletons()方法
返回a的半成品
返回已经完成初始化的a对象
在resolveReference中使用getBean方法获取b对象
获取半成品的a
前期工作
获取a对象getBean(a)
获取a对象
因为a不是从工厂中获取的,会之间返回 getObjectForBeanInstance(a);
尝试去缓存中获取a,拿到a的三级缓存getSingleton(a);
尝试去缓存中获取,结果为nullgetSingleton(a);
获取a对象放入到二级缓存中
完成bean的初始化过程finishBeanFactoryInitialization()
将三级缓存中的a的工厂删除this.singletonFactories.remove(a);
因为b不是从工厂中获取的,会之间返回 getObjectForBeanInstance(b);
刷新spring容器refress()方法
返回a对象
创建a
0 条评论
下一页