IOC容器初始化后,在容器中就建立BeanDefinition数据映射。依赖注入常见有两种时机,一个是在用户第一次向IoC容器getBean时触发,另外一个是在初始化容器时会将non-lazy-init的单例Bean预先实例化,内部也是调用getBean。

getBean()方法,在IOC容器的顶层接口BeanFactory中定义,然后在IOC容器的具体实现类DefaultListableBeanFactory类的基类AbstractBeanFactory实现了getBean()方法。

Bean的生命周期

依赖注入_依赖注入是什么意思_依赖注入 英文

Bean 的生命周期概括起来就是实例化 -> 属性赋值 -> 初始化 -> 销毁 4 个阶段:

Bean的扩展点

在Bean初始化过程中Aware接口依赖注入,有几个重要的可能被Bean实现的接口:

在Bean实例化与初始化过程的前期与后期分别有扩展的接口:

Bean生命周期中的扩展点接口处理有:

容器调用的Bean自身的扩展方法:

Bean的存放位置

Spring的IOC容器初始化完成后,BeanDefinition对象保存到BeanFactory的实例变量的beanDefinitionMap与beanDefinitionNames集合中(这个对象在DefaultListableBeanFactory中),注:解决BeanDefinition属性继承(bean标签的parent属性)最后都使用合并mergedBeanDefinitions容器。

完成Bean的初始化之后,不同作用域的Bean实例存放不同位置。

Spring托管的Bean基本上都是singleton作用域的Bean实例,为了缓存或者解决循环依赖,涉及到的几个存放位置有:

Spring查找Bean的顺序是singletonObjects -> earlySingletonObjects -> singletonFactories。

Bean 作用域

Spring 中为 Bean 定义了5种作用域, 分别为 :

依赖注入方式

对于spring配置一个bean时,如果需要给该bean提供一些初始化参数依赖注入,则需要通过依赖注入方式,常见三种方式:构造器注入、setter 方法注入、成员变量注入,另外还有工厂方法注入。。

Spring提供了五种autowire自动装配模式: