Spring Bean的生命周期从整体上看只有4个:
实例化 -> 属性赋值 -> 初始化 -> 销毁
第一大类:影响多个Bean的接口:
- InstantiationAwareBeanPostProcessor (作用于实例化阶段的前后)
- BeanPostProcessor (作用于初始化阶段的前后)
postProcessBeforeInstantiation在doCreateBean之前调用,也就是在bean实例化之前调用的,英文源码注释解释道该方法的返回值会替换原本的Bean作为代理,这也是Aop等功能实现的关键点。
第二大类:只调用一次的接口
又可以分两大类
- Aware类型的接口
- 生命周期接口
Aware类型的接口的作用就是让我们能够拿到Spring容器中的一些资源。基本都能够见名知意,Aware之前的名字就是可以拿到什么资源,例如BeanNameAware可以拿到BeanName,以此类推。调用时机需要注意:所有的Aware方法都是在初始化阶段之前调用的!
至于剩下的两个生命周期接口就很简单了,实例化和属性赋值都是Spring帮助我们做的,能够自己实现的有初始化InitializingBean 和销毁DisposableBean两个生命周期阶段。
https://www.jianshu.com/p/1dec08d290c1
完整顺序图:
时序图: