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

大厂面试真题-简单描述一下SpringBoot的启动过程

SpringBoot的启动流程是一个复杂但有序的过程,它涉及多个步骤和组件的协同工作。以下是SpringBoot启动流程的详细解析:

一、启动main方法

当SpringBoot项目启动时,它会在当前工作目录下寻找有@SpringBootApplication注解标识的类,并把这个类作为应用程序的入口点。在这个启动类中,会包含一个main()方法,用于启动整个应用程序。在main()方法中,会创建一个SpringApplication对象,并调用其run()方法来启动应用程序。

二、SpringApplication准备阶段

SpringApplication对象创建并调用run()方法之前,会进行一些准备工作:

  1. 读取配置文件:通过类加载器读取classpath下所有的spring.factories配置文件,创建一些初始配置对象。这些配置对象包括应用程序的初始化器(ApplicationContextInitializer)和监听器(ApplicationListener)。
  2. 设置主类:通过deduceMainApplicationClass()方法推断出主方法所在的类,为后续的包扫描和Bean注册做准备。
  3. 开启计时器:记录应用程序的启动时间,以便在启动完成后打印出启动时长。

三、创建应用程序上下文

接下来,SpringApplication会创建应用程序的上下文(ApplicationContext),这是Spring框架的核心容器,用于管理Bean的生命周期和依赖注入。在创建上下文的过程中,会进行以下操作:

  1. 准备环境:创建并配置ConfigurableEnvironment对象,用于读取环境配置,如application.ymlapplication.properties文件。
  2. 创建上下文:根据应用类型(如Servlet应用)创建合适的ApplicationContext实现类,如AnnotationConfigServletWebServerApplicationContext

四、刷新上下文(启动核心)

刷新上下文是SpringBoot启动流程中的核心步骤,它涉及多个子步骤,包括:

  1. 配置工厂对象:配置上下文类加载器、对象发布处理器和BeanFactoryPostProcessor等。
  2. 注册并实例化Bean:注册并实例化所有自动配置的Bean,以及通过包扫描找到的Bean。同时,会调用BeanPostProcessor对Bean进行后处理。
  3. 初始化特殊Bean:初始化一些与上下文有特别关系的Bean对象,如创建Tomcat服务器(对于Web应用)。
  4. 实例化剩余Bean:实例化所有剩余的Bean对象,并缓存到Bean工厂中。
  5. 发布通知:通知上下文刷新完成,并启动Tomcat服务器(对于Web应用)。

五、通知监听者并启动程序

在上下文刷新完成后,SpringApplication会通知所有的监听者(ApplicationListener),并调用它们的started()方法。同时,会执行所有实现了CommandLineRunnerApplicationRunner接口的Bean,以便在应用启动后执行一些特定的代码。

六、应用启动完成

一旦所有的步骤都完成,SpringBoot应用就会处于运行状态,准备好接受请求。此时,计时器会停止,并打印出启动时长。

综上所述,SpringBoot的启动流程是一个涉及多个步骤和组件的复杂过程,但它通过有序地执行这些步骤来确保应用程序能够正确地启动和运行。


http://www.kler.cn/a/371610.html

相关文章:

  • 3D Gaussian Splatting代码详解(一):模型训练、数据加载
  • 关于我的数据结构与算法——初阶第二篇(排序)
  • 时序动作定位 | CASE:基于聚类的弱监督时间动作定位前景与背景分离研究(ICCV 2023)
  • 日期格式 YYYY-MM-DD HH:mm:ss,SSS 代表什么意思
  • Amcor 如何借助 Liquid UI 实现SAP PM可靠性
  • 如何用猿大师办公助手实现OA系统中Word公文/合同在线编辑及流转?
  • 海外著名新闻门户媒体软文发稿之华盛顿独立报-大舍传媒
  • 力扣-最小覆盖子串
  • uniapp vue3 开发华为鸿蒙HarmonyOS 一些报错bug和如何配置签名
  • 引入了窥视孔连接(peephole connections)的LSTM
  • 讯飞星火4.0 Turbo发布,国际14项主流测试集9项第一
  • AUTOSAR 规范中的设计模式:传感器执行器模式
  • 【数据结构 | PTA】懂蛇语
  • [ARM-2D 专题]5 MDK编译器一个旧版本-Ofast优化bug的问题及解决办法
  • 网页上视频没有提供下载权限怎么办?
  • 06回归与相关
  • 通过cv库智能切片 把不同的分镜切出来 自媒体抖音快手混剪
  • 基于C语言实现的UDP服务器
  • Spring Boot 经典九设计模式全览
  • Linux 命令行参数 环境变量
  • 自己动手给ESP8285 / ESP8266 1MB 编译新版AT 固件
  • 第二代支付系统报文交换标准【大额支付系统分册】(版本1.5.6)
  • 【笔记】复数基础复数相乘的物理意义:旋转+缩放
  • synchronized基本用法、原理?
  • 论文阅读 - Pre-trained Online Contrastive Learning for Insurance Fraud Detection
  • es实现自动补全