SpringApplication生命周期的事件体系

本文将以SpringApplication的启动流程/生命周期各时期发出的Event事件为主线,结合每个生命周期内完成的大事记介绍,真正实现一文让你总览Spring Boot的全貌,这对你深入理解Spring Boot,以及整合进Spring Cloud都将非常重要

生命周期事件流程图

生命周期事件流程图


  • ApplicationStartingEvent:开始启动中
    • @since 1.5.0,并非1.0.0就有的哦。不过现在几乎没有人用1.5以下的版本了,所以可当它是标准事件。

  • ApplicationEnvironmentPreparedEvent:环境已准备好
    • @since 1.0.0。该事件节点是最为重要的一个节点之一,因为对于Spring应用来说,环境抽象Enviroment简直太重要了,它是最为基础的元数据,决定着程序的构建和走向,所以构建的时机是比较早的。

  • ApplicationContextInitializedEvent:上下文已实例化
    • @since 2.1.0,非常新的一个事件。当SpringApplication的上下文ApplicationContext准备好,对单例Bean们实例化之,发送此事件。所以此事件又可称为:contextPrepared事件。

  • ApplicationPreparedEvent:上下文已准备好
    • @since 1.0.0。截止到上个事件ApplicationContextInitializedEvent,应用上下文ApplicationContext充其量叫实例化好了,但是还剩下很重要的事没做,这便是本周期的内容。

  • ApplicationStartedEvent:应用成功启动
    • @since 2.0.0。截止到此,应用已经准备就绪,并且通过监听器、初始化器等完成了非常多的工作了,但仍旧剩下被认为最为重要的初始化单例Bean动作还没做、web容器(如Tomcat)还没启动,这便是这个周期所要做的事。

  • ApplicationReadyEvent:应用已准备好
    • @since 1.3.0。该事件所处的生命周期可认为基本同ApplicationStartedEvent,仅是在其后执行而已,两者中间并无其它特别的动作,但是监听此事件的监听器们还是蛮重要的。

  • 异常情况: SpringApplication是有可能在启动的时候失败(如端口号已被占用),当然任何一步骤遇到异常时交给SpringApplication#handleRunFailure()方法来处理,这时候也会有对应的事件发出。
    • ApplicationFailedEvent:应用启动失败
      • SpringApplication在启动时抛出异常:可能是端口绑定、也可能是你自定义的监听器你写了个bug等,就会“可能”发送此事件。

具体细节请移步: 不懂SpringApplication生命周期事件?那就等于不会Spring Boot嘛

你可能感兴趣的:(Spring,转载)