1. bean生命周期

BeanFactory接口的注释上, 有这么一段话:一个BeanFactory的实现应尽可能地支持标准的bean生命周期接口。并描述了bean生命周期的全套初始化方法及顺序:

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
2. DisposableBean's destroy
3. a custom destroy-method definition

spring中bean从创建到销毁,整个生命周期一共有几个阶段:

  1. 实例化bean
  2. 设置对象属性
  3. 检查Aware相关接口并设置相关依赖,包括下面Aware接口:
    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)
  4. BeanPostProcessor前置处理
  5. 检查是否是InitializaingBean以决定是否调用afterPropertiesSet方法
  6. 检查是否配置有自定义的init-method方法
  7. BeanPostProcessor后置处理
  8. 注册必要的Destruction相关回调接口

在销毁之前,生命周期接口方法如下:

  1. 是否实现DisposableBean接口
  2. 是否配置有自定义的destroy方法;

2. 提出问题

了解了上面的bean的生命周期之后,有一些疑惑需要先提出来:

  1. 生命周期的前10个调用方法,都是以Aware结尾的接口方法,各个XXXAware接口作用是什么?对开发者来说有没有用?
  2. 上面所有接口按照作用方式的不同如何分类?
  3. 开发者常见的涉及到Bean生命周期的操作方式有哪些?即知道了bean的生命周期,对我们有什么用?如何用?
Copyright © wychuan.com 2017 all right reserved,powered by Gitbook该文件修订时间: 2018-01-09 08:05:07

results matching ""

    No results matching ""