ApplicationContext 前事件
有些事件实际上是在 ApplicationContext 被创建之前触发的,所以你不能以 @Bean 的形式注册一个监听器。 你可以通过 SpringApplication.addListeners(…) 方法或 SpringApplicationBuilder.listeners(…) 方法注册它们。
如果你想让这些监听器自动注册,不管应用程序是如何创建的,你可以在你的项目中添加一个 META-INF/spring.plants 文件,并通过 org.springframework.context.ApplicationListener 属性来配置你的监听器,如以下例子所示。
org.springframework.context.ApplicationListener=com.example.project.MyListener
当应用程序运行时,Application event按以下顺序发布。
- 一个
ApplicationStartingEvent在运行开始时被发布,但在任何处理之前,除了注册监听器和初始化器之外。 - 当在上下文中使用的
Environment已知,但在创建上下文之前,将发布ApplicationEnvironmentPreparedEvent。 - 当
ApplicationContext已准备好并且ApplicationContextInitializers被调用,但在任何Bean定义被加载之前,ApplicationContextInitializedEvent被发布。 - 一个
ApplicationPreparedEvent将在刷新开始前但在Bean定义加载后被发布。 - 在上下文被刷新之后,但在任何应用程序和命令行运行程序被调用之前,将发布一个
ApplicationStartedEvent。 - 紧接着发布
LivenessState.CORRECT状态的AvailabilityChangeEvent,表明应用程序被认为是存活的。 - 在任何ApplicationRunner 和 CommandLineRunner被调用后,将发布一个
ApplicationReadyEvent。 - 紧接着发布
ReadinessState.ACCEPTING_TRAFFIC状态的AvailabilityChangeEvent,表明应用程序已经准备好为请求提供服务。 - 如果启动时出现异常,将发布一个
ApplicationFailedEvent。
以上列表仅包括与 SpringApplication 相关的 SpringApplicationEvent。 除此以外,以下事件也会在 ApplicationPreparedEvent 之后和 ApplicationStartedEvent 之前发布。
- 在
WebServer准备好后发布WebServerInitializedEvent。ServletWebServerInitializedEvent和ReactiveWebServerInitializedEvent分别对应Servlet和reactive的实现。 - 当
ApplicationContext被刷新时,将发布一个ContextRefreshedEvent。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果