Spring Boot-8启动涉及的监听器(扩展点)

发布于:2025-05-11 ⋅ 阅读:(27) ⋅ 点赞:(0)

从出现时间上看:

org.springframework.context.ApplicationListener,Spring 1.0开始出现

org.springframework.context.ApplicationContextInitializer,Spring 3.1开始出现

org.springframework.boot.SpringApplicationRunListener,Spring boot 1.0.0开始出现

org.springframework.boot.BootstrapRegistryInitializer,Spring boot2.4.5开始出现

从执行时间上看,先后顺序为:

BootstrapRegistryInitializer

SpringApplicationRunListener

ApplicationContextInitializer

ApplicationListener

从执行方式上看:

BootstrapRegistryInitializer的执行在run()方法中createBootstrapContext()方法中调用。

SpringApplicationRunListener的执行发生在run()方法中SpringApplicationRunListeners类手动调用。

ApplicationContextInitializer的执行发生在run()方法中的prepareContext()方法中。

ApplicationListener的执行发生在SpringApplicationRunListeners类手动调用时,会多次发生,由SpringApplicationRunListener的实现类EventPublishingRunListener去广播给ApplicationListener。

从作用上看:

BootstrapRegistryInitializer,没有自定义实现,

SpringApplicationRunListener,有大量自定义实现,分发时间触发ApplicationListener执行

ApplicationContextInitializer,有大量自定义实现,

ApplicationListener,有大量自定义实现,

设计分析

Spring时期,就有了 ApplicationListener这个监听器,用于给开发者扩展插件,它可以接受多个阶段的事件,开发者可以判断事件类型来决定是否要执行扩展逻辑。

在Spring boot中,通过SpringApplicationRunListeners这个控制类,来在不同阶段调用执行所有的SpringApplicationRunListener监听器,其中有个监听器EventPublishingRunListener,他能广播所有相关事件给ApplicationListener监听器。

事件的分类

org.springframework.context.ApplicationEvent,spring1.0出现的,是下面事件的父类

org.springframework.context.event.ApplicationContextEvent,是spring 2.5出现的

org.springframework.boot.context.event.SpringApplicationEvent,是spring boot 1.0.0出现的


网站公告

今日签到

点亮在社区的每一天
去签到