Spring Framework Bean 依赖注入
2021-07-06 21:34:30 0 举报
Spring Bean 依赖注入源码解析
作者其他创作
大纲/内容
DefaultSingletonBeanRegistry.getSingleton(\"people\
从【singletonsCurrentlyInCreation】中删除表示已经创建完毕
DefaultSingletonBeanRegistry
AbstractBeanFactory.doGetBean(\"people\")从容器中获取 people 对象
AbstractAutowireCapableBeanFactory.createBeanInstance(\"people\")通过反射调用构造方法创建 bean 实例
添加到【singletonFactories】三级缓存从【earlySingletonObjects】二级缓存移除添加到【registeredSingletons】表示构造成功
DefaultSingletonBeanRegistry.addSingletonFactory(\"people\")无论如何都会添加到三级缓存中
DefaultSingletonBeanRegistry.addSingletonFactory(\"dog\")无论如何都会添加到三级缓存中
由于【singletonFactories】一级缓存和【earlySingletonObjects】二级缓存中都没有所以不存在 earlySingletonReference在容器中的 bean 实例就是之前步骤中创建出来的对象
singletonFactories三级缓存,无论如何都会添加一份,但是并不一定会用到
DefaultSingletonBeanRegistry.getSingleton(\"dog\
②
DefaultSingletonBeanRegistry.afterSingletonCreation(\"people\")
DefaultSingletonBeanRegistry.beforeSingletonCreation(\"dog\")
①
registeredSingletons构造成功的对象名称集合
DefaultSingletonBeanRegistry.beforeSingletonCreation(\"people\")
AbstractAutowireCapableBeanFactory.createBeanInstance(\"dog\")通过反射调用构造方法创建 bean 实例
DefaultSingletonBeanRegistry.afterSingletonCreation(\"dog\")
⑨
添加到【singletonObjects】一级缓存中从【singletonFactories】三级缓存中删除从【earlySingletonObjects】二级缓存中删除添加到【registeredSingletons】表示已经创建成功
⑤
⑧
singletonObjects一级缓存,也是我们常用的 Spring bean 容器
④
添加到【singletonsCurrentlyInCreation】对象中表示正在创建
DefaultSingletonBeanRegistry.addSingleton(\"dog\")
singletonsCurrentlyInCreation正在创建的对象名称集合
AbstractAutowireCapableBeanFactory.populateBean(\"dog\")给 bean 属性赋值,依赖【people】此方法执行完毕后会完成,【dog】对象所有属性完成赋值操作
由于不在【singletonsCurrentlyInCreation】创建中集合所以直接跳过
⑦
AbstractAutowireCapableBeanFactory.populateBean(\"people\")给 bean 属性赋值,这里无依赖此方法执行完毕后会完成,【people】对象所有属性完成赋值操作
③
AbstractBeanFactory.doGetBean(\"dog\")从容器中获取 dog 对象
DefaultSingletonBeanRegistry.addSingleton(\"people\")
earlySingletonObjects二级缓存,正常情况下都不会用到
⑥
0 条评论
下一页