zoukankan      html  css  js  c++  java
  • Spring应用上下文的生命周期

    Spring应用上下文的生命周期

    近期在回顾之前学习的Spring源码,扫地生简单记录一下Spring应用上下文的声明周期。

    Spring应用上下文就是ApplicationContext,生命周期主要体现在org.springframework.context.support.AbstractApplicationContext#refresh()方法中,大致如下:

    1. Spring应用上下文启动准备阶段,设置相关属性,例如启动时间、状态标识、Environment对象。
    2. BeanFactory初始化阶段,初始化一个BeanFactory对象,加载出BeanDefinition们;设置相关组件,例如ClassLoader类加载器、表达式语言处理器、属性编辑器,并添加几个BeanPostProcessor处理器。
    3. BeanFactory后置处理阶段,主要是执行BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor的处理,对BeanFActory和BeanDefinitionRegistry进行后置处理,这里属于Spring应用上下文的一个扩展点。
    4. BeanFactory注册BeanPostProcessor阶段,主要初始化BeanPostProcessor类型的Bean(依赖查找),在Spring Bean生命周期的许多节点都能见到该类型的处理器。
    5. 初始化内建Bean阶段,初始化当前Spring应用上下文的MessageSource对象(国际化文案相关)、ApplicationEventMulticast而时间广播器对象,ThemeSource对象。
    6. Spring时间监听器注册阶段,主要获取到所有的ApplicationListener时间监听器进行注册,并广播早期事件。
    7. BeanFactory初始化完成阶段,主要是初始化所有还未初始化的Bean(不是抽象、单例模式、不是懒加载方式)。
    8. Spring应用上下文刷新完成阶段,清除当前Spring应用上下文中的缓存,例如通过ASM(java字节码操作和分析框架)。
    9. Spring 应用上下文启动阶段,需要主动调用 AbstractApplicationContext#start() 方法,会调用所有 Lifecycle 的 start() 方法,最后会发布上下文启动事件
    10. Spring 应用上下文停止阶段,需要主动调用 AbstractApplicationContext#stop() 方法,会调用所有 Lifecycle 的 stop() 方法,最后会发布上下文停止事件
    11. Spring 应用上下文关闭阶段,发布当前 Spring 应用上下文关闭事件,销毁所有的单例 Bean,关闭底层 BeanFactory 容器;注意这里会有一个钩子函数(Spring 向 JVM 注册的一个关闭当前 Spring 应用上下文的线程),当 JVM “关闭” 时,会触发这个线程的运行

    小结:

    • 上面的 12345678 都属于 Sping 应用上下文的刷新阶段,完成了 Spring 应用上下文一系列的初始化工作;

    • 9 属于 Spring 应用上下文启动阶段,和 Lifecycle 生命周期对象相关,会调用这些对象的 start() 方法,最后发布上下文启动事件;

    • 10 属于 Spring 应用上下文停止阶段,和 Lifecycle 生命周期对象相关,会调用这些对象的 stop() 方法,最后发布上下文停止事件;

    • 11 属于 Spring 应用上下文关闭阶段,发布上下文关闭事件,销毁所有的单例 Bean,关闭底层 BeanFactory 容器。

    向大神看齐
  • 相关阅读:
    模块-- HASH
    模块 –SYS
    所谓情商高,就是要有分寸感
    20个很有用的CSS技巧
    CSS3中文手册基础知识
    赠书《JavaScript高级程序设计(第三版)》5本
    能走多远,取决于你与谁同行
    谷歌网站
    开发头条精选0724
    开发头条精选0723
  • 原文地址:https://www.cnblogs.com/Liu-xing-wu/p/15361890.html
Copyright © 2011-2022 走看看