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 容器。

    向大神看齐
  • 相关阅读:
    oracle 数据库服务名怎么查
    vmware vsphere 6.5
    vSphere虚拟化之ESXi的安装及部署
    ArcMap中无法添加ArcGIS Online底图的诊断方法
    ArcGIS中字段计算器(高级计算VBScript、Python)
    Bad habits : Putting NOLOCK everywhere
    Understanding the Impact of NOLOCK and WITH NOLOCK Table Hints in SQL Server
    with(nolock) or (nolock)
    What is “with (nolock)” in SQL Server?
    Changing SQL Server Collation After Installation
  • 原文地址:https://www.cnblogs.com/Liu-xing-wu/p/15361890.html
Copyright © 2011-2022 走看看