23.5 应用程序的事件和监听器

除了一般的Spring Framework的事件(如ContextRefreshedEvent)以外,SpringApplication还会发送一些额外的应用程序事件。

一些事件实际上在创建ApplicationContext之前就被触发,所以您无法将监听这些事件的监听器注册为@Bean,不过可以通过SpringApplication.addListeners(…​)SpringApplicationBuilder.listeners(…​)方法注册它们。 如果您希望那些监听器能被自动地注册而不在意创建应用程序的方式,您可以在项目中添加一个META-INF/spring.factories文件,并使用org.springframework.context.ApplicationListener引用您自己的监听器。 org.springframework.context.ApplicationListener=com.example.project.MyListener

随着您的程序运行,应用程序事件按以下顺序发送:

  1. 在运行开始阶段发送ApplicationStartingEvent,早于除了注册监听器和初始化器之外的任何处理。
  2. 当知道了在上下文中使用的Environment对象后发送ApplicationEnvironmentPreparedEvent,早于上下文的创建。
  3. 在刷新开始之前发送ApplicationPreparedEvent,晚于bean定义的加载。
  4. 在刷新并且任何与刷新相关的回调都已经处理了(表明程序已准备好为请求提供服务)之后发送ApplicationReadyEvent
  5. 如果启动时出现异常发送ApplicationFailedEvent

通常您不需要使用应用程序的事件,但知道这些事件存在可能会有所帮助。在内部,Spring Boot使用事件来处理各种任务。


书籍推荐