天天看點

Spring Bean 的生命周期概述

概述

  1. Spring

    啟動,掃描指定的包路徑,查找需要被

    Spring

    管理的

    bean

  2. 構造

    BeanDefinition

    對象
  3. 執行個體化

    bean

    ,如果有多個構造方法,則需要推斷構造方法,确定好構造方法後,進行執行個體化得到一個對象
  4. 進行

    bean

    的屬性注入
  5. 如果

    bean

    實作了

    BeanNameAware

    接口,

    Spring

    将會

    bean

    id

    傳遞給

    setBeanName()

    方法
  6. 如果

    bean

    實作了

    BeanFactoryAware

    接口,

    Spring

    将會調用

    setBeanFactory()

    方法,将

    BeanFactory

    容器執行個體傳入
  7. 如果

    bean

    實作了

    ApplicationContextAware

    接口,

    Spring

    将調用

    setApplicationContext()

    方法,将

    bean

    所在的應用上下文引用傳入進來
  8. 如果

    bean

    實作了

    BeanPostProcessor

    接口,

    Spring

    将調用

    postProcessBeforeInitialization()

    方法
  9. 執行

    bean

    的初始化構造器方法
    • 如果

      bean

      的方法中有

      @PostConstruct

      注解标注的方法,

      Spring

      将執行這些方法
    • 如果

      bean

      實作了

      InitializingBean

      接口,

      Spring

      将調用

      afterPropertiesSet()

      方法
    • 如果

      bean

      使用

      init-method

      聲明了初始化方法,

      Spring

      将調用這個方法
  10. 如果

    bean

    實作了

    BeanPostProcessor

    接口,

    Spring

    會調用

    postProcessAfterInitialization()

    方法
  11. 至此,

    bean

    已經準備就緒,将會放入容器中
  12. Spring

    容器關閉時,執行銷毀方法
    • 如果

      bean

      的方法中有

      @PreDestroy

      注解标注的方法,則執行這些方法
    • 如果

      bean

      實作了

      DisposableBean

      中的

      destory()

      方法, 則調用

      destory

      方法