| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> SpringApplication 启动流程及各类事件生命周期那点事 -> 正文阅读 |
|
[Java知识库]SpringApplication 启动流程及各类事件生命周期那点事 |
前言本文通过Springboot启动方法分析SpringApplication逻辑。从静态run方法执行到各个阶段发布不同事件完成整个应用启动。 SpringApplication 源码注释中说明了该类的主要作用,如下所示 ?其他Spingboot 原理相关文章请参考 手把手分析Springboot @EnableScheduling原理 SpringCloud FeignClient底层实现原理(一) 启动逻辑详解springboot应用在启动时存在两种方式: 第一种通过静态run方法直接启动
第二种通过创建对象后执行run方法启动
第二种方法其实就是第一种方法背后实现逻辑。 在run方法执行过程中大量使用事件机制完成日志,配置文件,激活profile等工作,下图为整体执行流程图。 ?在初始化SpringApplication对象时通过springboot SPI方式对classpath下所有jar包中 META-INF/spring.factories文件进行加载,这也是springboot自动装配中使用到的逻辑。 ?在构造方法中 通过getSpringFactoriesInstances完成工厂类加载与初始化。
getSpringFactoriesInstances方法中通过一个单例类SpringFactoriesLoader完成所有META-INF/spring.factories文件的读取。通过classLoader.getResources方法读取classpath下所有jar包后队文件进行解析。
spring.factories文件内容为key value对,多个value用逗号分隔,如下所示
?接下来是启动逻辑的重点run方法。本文重点分析run方法中事件触发逻辑。 事件机制详解?在run方法中通过getRunListeners方法加载事件监听器,该监听器负责发布应用启动中各个阶段的状态
getRunListeners通过getSpringFactoriesInstances方法加载 SpringApplicationRunListener所有实现类,该接口默认实现类为 EventPublishingRunListener,该类包含如下方法 ?这下方法中通过 SimpleApplicationEventMulticaster类发送通知,该类名也能表示其作用:简单应用事件多播器,翻译出来总感觉差点意思。 ? ?在run 方法中存在以上6个listener方法调用的逻辑。具体发动哪些事件请看下图 ?上图中列出了监听器处理的部分事件,其他事件感兴趣的话可以通过源码进行分析。 总结通过整体启动分析将整个启动流程进行梳理,有助于大家在阅读源码前掌握正义的概要避免陷入局部逻辑无法自拔。 后面将会针对不同逻辑进行深入分析。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 23:52:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |