Spring Bean生命周期理解
BeanFactory接口是Spring的首要核心接口,要学习Spring必须对此接口深度理解。在阅读此接口源码的时候,刚好发现了接口文档对应的就是SpringBean的生命周期介绍。
以下为原文:
Bean factory implementations should support the standard bean lifecycle interfaces as far as possible. The full set of initialization methods and their standard order is:
1. BeanNameAware’s setBeanName
2. BeanClassLoaderAware’s setBeanClassLoader
3. BeanFactoryAware’s setBeanFactory
4. EnvironmentAware’s setEnvironment
5. EmbeddedValueResolverAware’s setEmbeddedValueResolver
6. ResourceLoaderAware’s setResourceLoader (only applicable when running in an application context)
7. ApplicationEventPublisherAware’s setApplicationEventPublisher (only applicable when running in an application context)
8. MessageSourceAware’s setMessageSource (only applicable when running in an application context)
9. ApplicationContextAware’s setApplicationContext (only applicable when running in an application context)
10. ServletContextAware’s setServletContext (only applicable when running in a web application context)
11. postProcessBeforeInitialization methods of BeanPostProcessors
12. InitializingBean’s afterPropertiesSet
13. a custom init-method definition
14. postProcessAfterInitialization methods of BeanPostProcessors
On shutdown of a bean factory, the following lifecycle methods apply:
1. postProcessBeforeDestruction methods of DestructionAwareBeanPostProcessors
DisposableBean’s destroy
2. a custom destroy-method definition
BeanFactory实现应该尽可能支持标准的bean生命周期接口。标准的初始化方法及其顺序是:
- BeanNameAware类的setBeanName方法调用
- BeanClassLoaderAware类的setBeanClassLoader方法调用
- BeanFactoryAware类setBeanFactory方法调用
- EnvironmentAware类setEnvironment方法调用
- EmbeddedValueResolverAware类setEmbeddedValueResolver方法调用
- ResourceLoaderAware类setResourceLoader方法调用(仅在ApplicationContext下才会调用)
- ApplicationEventPublisherAware类setApplicationEventPublisher方法调用 (仅在ApplicationContext下才会调用)
- MessageSourceAware类setMessageSource方法调用 (仅在ApplicationContext下才会调用)
- ApplicationContextAware类setApplicationContext方法调用 (仅在ApplicationContext下才会调用)
- ServletContextAware类setServletContext方法调用 (仅在WebApplicationContext下才会调用)
- BeanPostProcessor类postProcessBeforeInitialization方法调用
- InitializingBean类afterPropertiesSet方法调用
- 自定义初始化方法调用init-method
- BeanPostProcessor类postProcessAfterInitialization方法调用
在Bean容器关闭的时候,销毁方法流程如下:
- DestructionAwareBeanPostProcessor类postProcessBeforeDestruction方法调用
- DisposableBean类的destroy方法调用
- 自定义销毁方法destroy-method调用
以上清晰的描述了Spring容器中Bean标准生命周期过程,后面文章我将会对每一步生命周期进行学习分析。