本人将Spring的生命周期分为5个阶段。
- Java实例的创建
实例化一个对象,并将值和bean的引用注入到bean对应的属性中。
首先是实例化,之后是将值和其他bean的引用注入到bean对应的属性中。 - Spring容器相关注入
将Srping容器相关的信息注入到实例中。如bean的ID、Bean的工厂、Bean的上下文。
如果bean实现了BeanNameAware接口,则框架调用setBeanName方法,将bean的ID赋值进去。
如果bean实现了BeanFactoryAware接口,则框架调用setBeanFactory方法将工厂赋值进去。
如果bean实现了ApplicationContextAware接口,则框架调用setApplicationContext方法将容器赋值进去。 - 初始化
调用一系列初始化的方法。
首先是预初始,如果bean实现了BeanPostProcessor接口,则Spring将调用postProcessorBeforeInitialization方法。
然后是初始化,如果bean实现了InitializingBean接口,则Spring调用afterProperties方法
接着还是一个初始化,如果用户在配置中定义了init-method属性,则该bean会调用自定义的初始化方法。
接着是初始化后方法。如果bean实现了BeanPostProcessor接口,则调用postProcessAfterInitialization方法。 - 使用阶段
bean存活并服务于应用程序。 - 销毁阶段
在容器关闭的过程中,如果bean实现了DiposableBean接口,则Spring调用destroy方法。
如果配置中配置了destroy-method方法,则Spring会调用该方法。
整个过程如下图所示: