一、DI注入时序图
整个注入过程可以分成2个阶段
1. 实例化:创建对应的bean
2.依赖注入:将bean的相关依赖注入到实例中

二、入口分析
1.如果没有设置lazy-init=false,那么spring默认会在第一次调用bean的时候才初始化bean,所以入口在beanFatcory接口的getBean方法中。
2.如果设置了lazy-init=false,那么spring会在容器启动的时候直接初始化。在上一篇分析IOC初始化的时候,容器在初始化的时候都会调用refresh方法,在refresh方法中有一个finishBeanFactoryInitialization方法,这个就是直接初始化bean的入口,而在finishBeanFactoryInitialization方法内部其实也是调用BeanFactory的getBean方法来生成bean的
三、源码分析
调用BeanFatory的getBean方法->AbstractBeanFactory的getBean方法的具体实现->调用AbstractAutowireCapableBeanFactory的createBean方法->AbstractAutowireCapableBeanFactory的doCreateBean方法->先执行createBeanInstance创建对应的实例,然后通过populateBean注入相关属性。
本文深入剖析了Spring框架中依赖注入(DI)的工作流程,详细介绍了实例化与依赖注入两个核心阶段,以及不同初始化策略下bean的加载时机,通过源码分析揭示了getBean方法在bean创建过程中的关键作用。

被折叠的 条评论
为什么被折叠?



