spring bean生命周期

image.png
  1. 实例化
  2. ioc依赖注入
  3. setBeanName 实现
  4. BeanFactoryAware实现
  5. ApplicationContextAware实现
  6. postProcessBeforeInitialization接口实现-初始化预处理
  7. init-method
  8. postProcessAfterInitialization
  9. Destory 过期自动清理阶段
  10. destory-method 自动配置清理

1.实例化

spring启动,查找并加载需要被spring管理的bean,进行bean的实例化

2. IOC依赖注入

bean实例化后将对bean的引入和值注入到bean的属性中

3.setBeanName 实现

如果bean实现了BeanNameAware接口,spring将bean的Id传递给setBeanName ()方法

4.BeanFactoryAware实现

如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将beanFactory容器实例传入

5.ApplicationContextAware实现

如果bean实现了ApplicationContextAware接口,spring将调用setApplicationContext()方法,将应用上下文的引用传入到bean中

6.postProcessBeforeInitialization接口实现-初始化预处理

如果bean实现了beanPostProcessor接口,spring将调用postProcessBeforeInitialization() 方法

7.init-method

如果bean实现了InitializingBean接口,spring就将调用他们的afterPropertiesSet()方法。似的,如果bean使用init-method声明了初始化方法,该方法也会被调用

8.postProcessAfterInitialization()方法。

此时,Bean已经准备就绪,可以被应用程序使用了。他们将一直驻留在应用上下文中,直到应用上下文被销毁

9.

如果Bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用

只有四个!

是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段。在这四步之间穿插的各种扩展点

实例化 Instantiation
属性赋值 Populate
初始化 Initialization
销毁 Destruction
实例化 -> 属性赋值 -> 初始化 -> 销毁

你可能感兴趣的:(spring bean生命周期)