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

从出现时间上看:

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出现的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何启动vue项目及vue语法组件化不同标签应对的作用说明

如何启动vue项目及vue语法组件化不同标签应对的作用说明 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】&…

思考:(linux) tmux 超级终端快速入门的宏观思维

tmux 工具集合 GitHub - rothgar/awesome-tmux: A list of awesome resources for tmux 要点: 习惯性思维的变换与宿主机之间的双向复制、粘贴手动备份全部窗口,以及还原自定义窗格提示信息TPM 插件的安装思想别名 在有些场景里,可能无法…

Python实例题:Python协程详解公开课

目录 Python实例题 题目 课程目标 课程内容规划 1. 课程开场(5 分钟) 2. 基础概念讲解(15 分钟) 并发与并行: 线程与进程: 3. Python 协程的实现方式(20 分钟) 生成器实现…

AI时代的数据可视化:未来已来

你有没有想过,数据可视化在未来会变成什么样?随着人工智能(AI)的飞速发展,数据可视化已经不再是简单的图表和图形,而是一个充满无限可能的智能领域。AI时代的可视化不仅能自动解读数据,还能预测…

强化学习PPO算法学习记录

1. 四个模型: Policy Model:我们想要训练的目标语言模型。我们一般用SFT阶段产出的SFT模型来对它做初始化。Reference Model:一般也用SFT阶段得到的SFT模型做初始化,在训练过程中,它的参数是冻结的。Ref模型的主要作用…

边缘计算从专家到小白

“云-边-端”架构 “云” :传统云计算的中心节点,是边缘计算的管控端。汇集所有边缘的感知数据、业务数据以及互联网数据,完成对行业以及跨行业的态势感知和分析。 “边” :云计算的边缘侧,分为基础设施边缘和设备边缘…

Windows:Powershell的使用

文章目录 零、格式化输出命令1、Format-List(别名:fl) 一、服务管理SC命令二、软件管理命令三、权限管理命令1、Get-Acl2、Set-Acl 总结 零、格式化输出命令 1、Format-List(别名:fl) 可通过管道符传递对象…

实现在h5中添加日历提醒:safari唤起系统日历,其它浏览器跳转google日历

需求:点击按钮后,将设定的一些信息插入到系统日历的日程安排中。 调研过程 先google了一段时间,了解该需求大概的实现方式。可以创建日历文件,在点击的时候下载该日历文件,看起来还比较复杂,并且由于不具…

【Bluedroid】蓝牙 HID 设备服务注册流程源码解析:从初始化到 SDP 记录构建

本文围绕蓝牙 HID(人机接口设备)服务注册流程,详细解析从 HID 服务启用、设备初始化、L2CAP 通道注册到 SDP(服务发现协议)记录构建的全流程。通过分析关键函数如btif_hd_service_registration、BTA_HdEnable、HID_Dev…

Win10无法上网:Windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目找不到域 TEST 的域控制器DNS 解析存在问题

目录 一.先看问题 二.解决问题 三.补充备用 一.先看问题 Win08有网且已经加入域 Win10无网并且找不到域(说明:Win10我之前已经加入过域的,并且能够上网,但每次在宿舍和教室切换校园网,就会导致只有Win10无网&#…

M0基础篇之ADC

本节课使用到的例程 一、Single模式例程基本配置的解释 在例程中我们只使用到了PA25这一个通道,因此我们使用的是Single这个模式,也就是我们在配置模式的时候使用的是单一转换。 进行多个通道的测量我们可以使用Sequence这个模式。 二、Single模式例程基…

浅谈装饰模式

一、前言 hello大家好,本次打算简单聊一下装饰者模式,其实写有关设计模式的内容还是蛮有挑战性的,首先呢就是小永哥实力有限担心说不明白,其次设计模式是为了解决某些问题场景,在当前技术生态圈如此完善的情况下&#…

04 mysql 修改端口和重置root密码

当我们过了一段时间,忘了自己当初创建的数据库密码和端口,或者端口被占用了,要怎么处理呢 首先,我们先停止mysql。 一、修改端口 打开my.ini文件,搜索port,默认是3306,根据你的需要修改为其他…

【基于 LangChain 的异步天气查询1】异步调用 Open-Meteo API 查询该城市当前气温

目录 一、功能概述 二、文件结构 三、城市天气实时查询(运行代码) weather_runnable.py main.py 运行结果 四、技术亮点 五、使用场景 一、功能概述 它实现了以下主要功能: 用户输入地点(城市名) 构造提示词…

Spark的三种部署模式及其特点与区别

Spark支持多种集群部署模式,主要分为以下三类: 部署模式特点适用场景资源管理依赖Local模式单机运行,所有进程(Driver、Executor)在同一个JVM中开发调试、小规模数据测试无集群资源管理,仅本地线程模拟无需…

再度深入理解PLC的输入输出接线

本文再次重新梳理: 两线式/三线式传感器的原理及接线、PLC的输入和输出接线,深入其内部原理,按照自己熟悉的方式去理解该知识 在此之前,需要先统一几个基础知识点: 在看任何电路的时候,需要有高低电压差&…

dockerfile编写入门

dockerfile 入门 前提已经知道常用的docker和linux命令 如容器的创建,运行, linux的文件命令,会上传文件到linux等等 dockerfile简介 之前我们所使用的镜像都是别人构建好的,但是别人构建好的镜像不一定能满足我们的需求。为了满足我们自己的某一些需求&#xff…

jenkins 启动报错

java.lang.UnsatisfiedLinkError: /opt/application/jdk-17.0.11/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory。 解决方案: yum install freetype-devel 安装完成之后重启jenkins。

Harness: 全流程 DevOps 解决方案,让持续集成如吃饭般简单

引言 在当今快速发展的软件开发世界中,高效的 DevOps 工具变得越来越重要。Harness 作为一个开源的运维平台,为开发和运维团队提供了从代码托管到 CI/CD 的全流程解决方案,同时实现自动化的开发环境和制品管理。这种集中化的工具可以显著减少运维难度,提高团队效率,真正解…

Kubernetes生产实战(十七):负载均衡流量分发管理实战指南

在Kubernetes集群中,负载均衡是保障应用高可用、高性能的核心机制。本文将从生产环境视角,深入解析Kubernetes负载均衡的实现方式、最佳实践及常见问题解决方案。 一、Kubernetes负载均衡的三大核心组件 1)Service资源:集群内流…