- 实例化
- ioc依赖注入
- setBeanName 实现
- BeanFactoryAware实现
- ApplicationContextAware实现
- postProcessBeforeInitialization接口实现-初始化预处理
- init-method
- postProcessAfterInitialization
- Destory 过期自动清理阶段
- 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
实例化 -> 属性赋值 -> 初始化 -> 销毁