04. Spring Framework 循环依赖
2022-02-26 09:50:25 0 举报
AI智能生成
Spring 循环依赖
作者其他创作
大纲/内容
getSingleton(\"dog\
beforeSingletonCreation(\"dog\")添加到【singletonsCurrentlyInCreation】集合中表示正在创建
createBeanInstance(\"dog\
addSingletonFactory(\"dog\
getSingleton(\"person\
beforeSingletonCreation(\"person\")添加到【singletonsCurrentlyInCreation】集合中表示正在创建
createBeanInstance(\"person\
addSingletonFactory(\"person\
getEarlyBeanReference()调用【SmartInstantiationAwareBeanPostProcessor】的 getEarlyBeanReference() 方法
getEarlyBeanReference(\"dog\
AbstractBeanFactory.doGetBean(\"dog\")从容器中获取 dog 对象
populateBean(\"person\")给 bean 属性赋值,依赖【dog】,所以需要从容器中查找 dog 完成属性赋值此方法执行完毕后【person】对象所有属性会完成赋值操作
校验是否能从二级缓存【earlySingletonObjects】中获取到之前提前暴露的 bean 对象如果可以获取到,需要与赋值后的 bean 对象进行比较如果不是同一个对象则表明被 AOP 进行代理了这里就会抛出异常
AbstractAutowireCapableBeanFactory.doCreateBean(\"person\")真正的创建对象方法
createBean(\"person\
singletonFactory.getObject()通过上一步传入的匿名内部类创建 bean 对象
addSingleton(\"person\
AbstractBeanFactory.doGetBean(\"person\")从容器中获取 people 对象
populateBean(\"dog\")给 bean 属性赋值,依赖【person】,所以需要会从容器中查找 person 完成属性赋值此方法执行完毕后【dog】对象所有属性会完成赋值操作
AbstractAutowireCapableBeanFactory.doCreateBean(\"dog\")真正的创建对象方法
createBean(\"dog\
singletonFactory.getObject()通过上一步传入的匿名内部类创建 bean 对象
addSingleton(\"dog\
AbstractBeanFactory.doGetBean(\"dog\")从容器中获取 dog 对象一级缓存【singletonFactories】二级缓存 【earlySingletonObjects】三级缓存 【singletonFactories】
0 条评论
回复 删除
下一页