01-什么是Bean的生命周期
Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。
所谓的生命周期就是:对象从创建开始到最终销毁的整个过程
02-为什么要知道Bean的生命周期
生命周期的本质:在哪个时间节点上调用了哪个类的哪个方法
我们需要充分的了解在这个生命线上,都有哪些特殊的时间节点。 只有我们知道了特殊的时间节点都在哪,到时我们才可以确定代码写到哪
03-Bean的生命周期之5步
Bean生命周期的管理,可以参考Spring的源码:AbstractAutowireCapableBeanFactory类的doCreateBean()方法
Bean生命周期可以粗略的划分为五大步:
第一步:实例化Bean—— 调用无参数构造方法
第二步:Bean属性赋值—— 调用set() 方法
第三步:初始化Bean—— 会调用Bean的 init() 方法,init() 方法需要自己写,自己配置,方法名随意
第四步:使用Bean
第五步:销毁Bean—— 会调用Bean的 destroy() 方法,这个方法需要自己写,自己配置,方法名随意
注意点:只有正常关闭spring容器,bean的销毁方法才会被调用
04-Bean生命周期之7步 —— 面试
在以上的5步中,第3步是初始化Bean,如果你还想在初始化前和初始化后添加代码,可以加入“Bean后处理器”
编写一个类实现BeanPostProcessor类,并且重写before和after方法:
import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; @Component public class LogBeanPostProcessor implements BeanPostProcessor { // 方法有两个参数: // 第一个参数:刚创建的bean对象 // 第二个参数:bean的名字 // 在调用initBean()前执行,即初始化Bean方法执行之前调用 @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("Bean后处理器的before方法执行,即将开始初始化"); return bean; } // 在调用initBean()后执行,即初始化Bean方法执行之后调用 @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("Bean后处理器的after方法执行,已完成初始化"); return bean; } }如果加上Bean后处理器的话,Bean的生命周期就是7步了:
掌握以上7步应付面试足矣
05-Bean生命周期之10步
关于上图中检查Bean是否实现了Aware的相关接口的说明:
Aware相关的接口包括:BeanNameAware、BeanClassLoaderAware、BeanFactoryAware
当Bean实现了BeanNameAware,Spring会将Bean的名字传递给Bean
当Bean实现了BeanClassLoaderAware,Spring会将加载该Bean的类加载器传递给Bean
当Bean实现了BeanFactoryAware,Spring会将Bean工厂对象传递给Bean
对于SpringBean的生命周期,掌握之前的7步即可,够用