但是当我第一次看到该图时,就产生了很多困扰,“Aware,……这些都是什么啊?而且这么多步骤,太多了,该怎么记啊?” 。
其实要记忆该过程,还是需要我们先去理解,本文将从以下两方面去帮助理解 Bean 的生命周期:
生命周期的概要流程:对 Bean 的生命周期进行概括,并且结合代码来理解;
扩展点的作用:详细介绍 Bean 生命周期中所涉及到的扩展点的作用 。
2. 生命周期的概要流程
Bean 的生命周期概括起来就是4 个阶段:
实例化()属性赋值()初始化()销毁()
【spring中bean生命周期】实例化:第 1 步,实例化一个 bean 对象;
属性赋值:第 2 步,为 bean 设置相关属性和依赖;初始化:第 3~7 步,步骤较多,其中第 5、6 步为初始化操作,第 3、4 步为在初始化前执行,第 7 步在初始化后执行,该阶段结束,才能被用户使用;销毁:第 8~10步,第8步不是真正意义上的销毁(还没使用呢),而是先在使用前注册了销毁的相关调用接口,为了后面第9、10步真正销毁 bean 时再执行相应的方法 。
下面我们结合代码来直观的看下,在 () 方法中能看到依次执行了这 4 个阶段:
// AbstractAutowireCapableBeanFactory.javaprotected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)throws BeanCreationException {// 1. 实例化BeanWrapper instanceWrapper = null;if (instanceWrapper == null) {instanceWrapper = createBeanInstance(beanName, mbd, args);}Object exposedObject = bean;try {// 2. 属性赋值populateBean(beanName, mbd, instanceWrapper);// 3. 初始化exposedObject = initializeBean(beanName, exposedObject, mbd);}// 4. 销毁-注册回调接口try {registerDisposableBeanIfNecessary(beanName, bean, mbd);}return exposedObject;}
由于初始化包含了第 3~7步,较复杂,所以我们进到 () 方法里具体看下其过程(注释的序号对应图中序号):
// AbstractAutowireCapableBeanFactory.javaprotected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) {// 3. 检查 Aware 相关接口并设置相关依赖if (System.getSecurityManager() != null) {AccessController.doPrivileged((PrivilegedAction
在 () 方法中会检查接口和 init- 方法,销毁的过程也与其类似:
// DisposableBeanAdapter.javapublic void destroy() {// 9. 若实现 DisposableBean 接口,则执行 destory()方法if (this.invokeDisposableBean) {try {if (System.getSecurityManager() != null) {AccessController.doPrivileged((PrivilegedExceptionAction
- IC测试-CP测试中运用到的pattern简介
- 初伏中伏末伏的区别
- 中元节是哪个国家的节日
- 《JVM》对象内存分配的TLAB机制与G1中的TLAB流程
- Thread Local Allocation Buffer JVM中TLAB
- 黑猫带你学UFS协议第1篇:全网最全UFS协议中文详讲,这份学习框架图
- 【NLP实战】基于Bert和双向LSTM的情感分类【中篇】
- 一文理解深度学习中的BN,LN,IN,GN,SN的归一化操作
- 2023中秋节民政局可以领结婚证吗 中秋节能不能领结婚证
- 光大银行是什么银行