Bean
实例化的基本流程
1.加载
xml
配置文件,解析获取配置中的每个的信息,封装成一个个的
BeanDefifinition
对象
;
2.将
BeanDefifinition
存储在一个名为
beanDefifinitionMap
的
Map<String,BeanDefifinition>
中
;
3.ApplicationContext
底层遍历
beanDefifinitionMap
,创建
Bean
实例对象
;
4.创建好的
Bean
实例对象,被存储到一个名为
singletonObjects
的
Map<String,Object>
中
;
5.当执行
applicationContext.getBean(beanName)
时,从
singletonObjects
去匹配
Bean
实例返回。
当我们了解了基本流程之后,就需要深入了解具体的过程,则需要学习到
Spring
的后处理器。
Spring
的后处理器。
①
Bean
工厂后处理器
– BeanFactoryPostProcessor
BeanFactoryPostProcessor
是一个接口规范,实现了该接口的类只要交由
Spring
容器管理的话,那么 Spring就会 回调该接口的方法,用于对BeanDefifinition
注册
和
修改
的功能。
②
Bean
后处理器
– BeanPostProcessor
Bean
被实例化后,到最终缓存到名为
singletonObjects
单例池之前,中间会经过
Bean
的初始化过程, 例如:属性 的填充、初始方法init
的执行等,其中有一个对外进行扩展的点
BeanPostProcessor
,我们称为
Bean
后 处理。跟上 面的 Bean
工厂后处理器相似,它也是一个接口,实现了该接口并被容器管理的
BeanPostProcessor
, 会在流程节 点上被Spring
自动调用。
生命周期总结:
Spring Bean
的生命周期是从
Bean
实例化之后,即通过反射创建出对象之后,到
Bean
成为一个完整对 象,最终存 储到单例池中,这个过程被称为Spring Bean
的生命周期。
Spring Bean
的生命周期大体上分为
三个阶段
:
一、Bean
的实例化阶段
:
Spring
框架会取出
BeanDefifinition
的信息进行判断当前
Bean
的范围是否是
singleton
的, 是否不是延迟加载的,是否不是
FactoryBean
等,最终将一个普通的
singleton
的
Bean
通过反射进行实例化;
二、Bean
的初始化阶段
:
Bean
创建之后还仅仅是个
”
半成品
”
,还需要对
Bean
实例的属性进行填充、执 行一些Aware
接口方法、执行
BeanPostProcessor
方法、执行
InitializingBean
接口的初始化方 法、执行自定义初始化init
方法等。该阶段是
Spring
最具技术含量和复杂度的阶段;
三、Bean
的完成阶段
:经过初始化阶段,
Bean
就成为了一个完整的
Spring Bean
,被存储到单例池singletonObjects中去了,即完成了
Spring Bean
的整个生命周期。
版权声明:本文为weixin_71601024原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。