SpringBoot的启动流程扩展点
阅读说明:
1.如果有排版格式问题,请移步https://www.yuque.com/mrhuang-ire4d/oufb8x/yo5ywqt5eudxvxfc?singleDoc#%20%E3%80%8ASpring%E5%8F%AF%E6%89%A9%E5%B1%95%E6%8E%A5%E5%8F%A3%E6%80%BB%E7%BB%93%E3%80%8B,选择宽屏模式效果更佳。
2.本文为原创文章,转发请注明出处。
SpringBoot的启动流程
启动源码如下:
public ConfigurableApplicationContext run(String... args) {
long startTime = System.nanoTime();
DefaultBootstrapContext bootstrapContext = this.createBootstrapContext();
ConfigurableApplicationContext context = null;
this.configureHeadlessProperty();
SpringApplicationRunListeners listeners = this.getRunListeners(args);
listeners.starting(bootstrapContext, this.mainApplicationClass);
try {
ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
ConfigurableEnvironment environment = this.prepareEnvironment(listeners, bootstrapContext, applicationArguments);
Banner printedBanner = this.printBanner(environment);
context = this.createApplicationContext();
context.setApplicationStartup(this.applicationStartup);
this.prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);
this.refreshContext(context);
this.afterRefresh(context, applicationArguments);
Duration timeTakenToStartup = Duration.ofNanos(System.nanoTime() - startTime);
if (this.logStartupInfo) {
(new StartupInfoLogger(this.mainApplicationClass)).logStarted(this.getApplicationLog(), timeTakenToStartup);
}
listeners.started(context, timeTakenToStartup);
this.callRunners(context, applicationArguments);
} catch (Throwable var12) {
if (var12 instanceof SpringApplication.AbandonedRunException) {
throw var12;
}
this.handleRunFailure(context, var12, listeners);
throw new IllegalStateException(var12);
}
try {
if (context.isRunning()) {
Duration timeTakenToReady = Duration.ofNanos(System.nanoTime() - startTime);
listeners.ready(context, timeTakenToReady);
}
return context;
} catch (Throwable var11) {
if (var11 instanceof SpringApplication.AbandonedRunException) {
throw var11;
} else {
this.handleRunFailure(context, var11, (SpringApplicationRunListeners)null);
throw new IllegalStateException(var11);
}
}
}
上下文准备
调用扩展点:ApplicationContextInitializer
发布上下文初始化事件:ApplicationContextInitializedEvent
上下文刷新
扫描注册beanDefinition;
创建bean流程;
发布上下文刷新事件:ContextRefreshedEvent
上下文刷新完成
发布上下文已启动事件:ApplicationStartedEvent
执行扩展点:ApplicationRunner,CommandLineRunner
最后
发布上下文ready事件:ApplicationReadyEvent
启动流程扩展点调用图:

更新信息请移步:Spring专栏
参考:
[1].https://blog.csdn.net/weixin_38650898/article/details/124320262
[2].https://mp.weixin.qq.com/s/dIv3FoLQuZRKpJNqo5H0LQ
%0A%0A%0A%0A%E5%8F%82%E8%80%83%EF%BC%9A%0A%5B1%5D.https%3A%2F%2Fblog.csdn.net%2Fweixin_38650898%2Farticle%2Fdetails%2F124320262%0A%5B2%5D.https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FdIv3FoLQuZRKpJNqo5H0LQ%0A%5B3%5D.
[3].https://www.cnblogs.com/myshare/p/17727492.html
[4].https://blog.csdn.net/ZXMSH/article/details/125587779
SpringBoot的启动流程扩展点的更多相关文章
- SpringBoot IoC启动流程、初始化过程及Bean生命周期各个阶段的作用
目录 SpringBoot IoC启动流程.初始化过程及Bean生命周期各个阶段的作用 简述 首先明确IoC容器是啥 准备-SpringApplication的实例化 启动-SpringApplica ...
- SpringBoot的启动流程是怎样的?SpringBoot源码(七)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 温故而知新 本篇接 SpringBoot内置的各种Starter是怎样构建的? SpringBoot源码(六) 温故而知新, ...
- java框架之SpringBoot(10)-启动流程及自定义starter
启动流程 直接从 SpringBoot 程序入口的 run 方法看起: public static ConfigurableApplicationContext run(Object source, ...
- SpringBoot的启动流程分析(2)
我们来分析SpringApplication启动流程中的run()方法,代码如下 public ConfigurableApplicationContext run(String... args) { ...
- SpringBoot的启动流程分析(1)
通过分析我们可以找到 org.springframework.boot.SpringApplication 中如下, public static ConfigurableApplicationCont ...
- springboot 大致启动流程
SpringApplication的run方法的实现是我们本次旅程的主要线路,该方法的主要流程大体可以归纳如下: 1) 如果我们使用的是SpringApplication的静态run方法,那么,这个方 ...
- springboot 的启动流程
1.我们springboot 项目的启动类如下. 方式1 @SpringBootApplicationpublic class SpringbootZkLockApplication { public ...
- SpringBoot启动流程分析(六):IoC容器依赖注入
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...
- SpringBoot启动流程分析(一):SpringApplication类初始化过程
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...
- SpringBoot启动流程分析(二):SpringApplication的run方法
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...
随机推荐
- Web前端入门第 15 问:学会查阅 HTML 文档
HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. HTML的魔法世界,多姿多彩,千变万化. 授人以鱼不如授人以渔,文档阅读是开发者必备的技能,毕竟代码出现 BUG ...
- MongoDB入门介绍与案例分析
一.MongoDB 数据库定位 首先我们来看一下 MongoDB 是什么样的数据库.数据库分两大类: OLTP(Online Transaction Processing)联机事务处理. OLAP(O ...
- go ERROR invalid character '<' looking for beginning of value
报错 go ERROR invalid character '<' looking for beginning of value 请检查服务器响应数据是否正确,能够正确被 json 解析 一般碰 ...
- halcon 深度学习教程(三) 目标检测之水果分类
原文作者:aircraft 原文链接:halcon 深度学习教程(三) 目标检测之水果分类 - aircraft - 博客园 深度学习教程目录如下,还在继续更新完善中 深度学习系列教程目录 有兴趣可以 ...
- explorer
explorer 是 Windows 下的一个实用命令. 实例 打开文件浏览器 explorer # 效果等同于快捷键操作 [Win + E] 使用默认浏览器打开链接 explorer "h ...
- Kubernetes基础教程-通过部署Nginx快速学习基本使用命令
1.验证节点信息 1.1.查看控制平面组件的状态 [root@linux-servertwo software]# kubectl get cs Warning: v1 ComponentStatus ...
- .net clr 8年才修复的BUG,你让我损失太多了
一.概述 .NET社区修复问题可谓是龟速,一个BUG在.NET 7.0+版本才修复,你让我损失了几万块,我现在还记得客户那种质疑的表情,你了解那种尬尴的气氛吗?你让我一度怀疑dotnetty,我从来不 ...
- centos安装npm和 nodejs
NPM安装 00X01:创建目录 mkdir /usr/local/node/ cd /usr/local/node/ 00x02:下载安装包 wget https://npm.taobao.org/ ...
- 01Spring-01jdbc 未使用spring代码编写
目录 pom.xml JdbcDemo1.java pom.xml <?xml version="1.0" encoding="UTF-8"?> & ...
- 基于口令的密码—PBE
目录 流程 加密流程 解密流程 盐的作用 通过拉伸来改良PBE的安全性 如何生成安全口令的建议 定义: PBE是一种根据口令生成密钥并用该密钥进行加密的方法. 加密和解密都使用同一个密钥. 口令一词多 ...