当前位置: 首页 > news >正文

spring boot 启动过程

在外面启动spring boot项目的时候,入口在如下方法中
在这里插入图片描述
那么它的启动过程是如何的,通过点击进去发现是如下方法;

  public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {return (new SpringApplication(primarySources)).run(args);}

在这个方法中,可以分为2个大步骤;
一:new SpringApplication(primarySources): 即将我们传进来的class进行创建为springApplication。

在这里面
1.记录传入的primarySources
2.推测当前应用的类型
在这里插入图片描述
3.从spring.factories中获取BootstrapRegistryInitializer
4.从spring.factories中获取ApplicationContextInitializer
5.并且也获取ApplicationListener

	this.bootstrapRegistryInitializers = new ArrayList<>(getSpringFactoriesInstances(BootstrapRegistryInitializer.class));setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));this.mainApplicationClass = deduceMainApplicationClass();

6.推测当前main方法对应的启动类
在这里插入图片描述
二:调用run()方法
1.创建并初始化DefaultBootstrapContext
2.获取SpringApplicationRunListeners

SpringApplicationRunListeners listeners = getRunListeners(args);

3.调用SpringApplicationRunListeners 的starting(),发布ApplicationStartingEvent事件。
4.将启动参数artgs封装为ApplicationArguments对象
5.准备Environment
6.创建spring容器(ApplicationContext)
7.预处理spring容器

prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);

8.刷新

	refreshContext(context);

9.调用SpringApplicationRunListener的started()方法,发布ApplicationStartedEvent事件

listeners.started(context, timeTakenToStartup);

10.调用SpringApplicationRunListener的ready()方法,发布ApplicationReadyEvent事件

		try {Duration timeTakenToReady = Duration.ofNanos(System.nanoTime() - startTime);listeners.ready(context, timeTakenToReady);}catch (Throwable ex) {handleRunFailure(context, ex, null);throw new IllegalStateException(ex);}
http://www.dtcms.com/a/561754.html

相关文章:

  • SpringCloud——Docker基础
  • 计算机网络自顶向下方法27——运输层 拥塞控制原理 拥塞原因与代价及控制方法
  • 佛山茶叶网站建设网站上线流程图
  • 第四天学习总结:C++ 文件系统 × Linux 自动化 × Makefile 工程化
  • 闸北区网站设计网站建设的分项报价
  • 分治思想用于SAT求解的应用(ToSC2025-3)
  • 深圳自助网站建设去国外做外卖网站好
  • C++ 多线程与 Linux 进程创建详解
  • 【C语言基础案例】经典C语言程序设计100例附源码解析(91-100例)
  • 子目录创建网站wordpress html5视频播放插件
  • 武夷山网站设计沈阳网站seo排名优化
  • 湘潭市建设路学校网站拍卖网站功能需求文档
  • 优秀北京网站建设深圳龙华区龙华街道高坳新村
  • 计算机网络自顶向下方法26——运输层 SYN洪泛攻击 SYNCookie
  • 【RL】以信息熵的角度理解RL
  • linux下讲解基础IO
  • 乌兰察布网站建设桂林漓江图片高清
  • Docker革命:软件开发的集装箱时代
  • 北京移动官网网站建设商务网站建设注意事项
  • 某网站的安全建设方案纪念平台网站建设
  • 定州网站制作潍坊网站制作人才招聘
  • 【C语言基础案例】经典C语言程序设计100例附源码解析(21-30例)
  • 网站建设需要缴纳印花税么邢台瑞光网络科技有限公司
  • 2025 年山西省职业院校技能大赛(高职教师组)移动应用设计与开发赛项样题
  • 证券投资网站做哪些内容做网站简单的软件
  • 网站建设费的分录怎么写济南知名网站建设平台
  • 『 数据库 』MySQL复习 - 查询进阶指南:基于经典测试表的复合查询实践
  • openpi π 0.5复现 实战
  • git命令和markdown语法参考
  • 域名如何跟网站绑定网站托管怎做