SpringBoot面试题09-SpringBoot启动流程

一、启动流程一览

二、对应启动代码

三、结构型答案总结

问:请聊一聊 SpringBoot 的启动流程?

答:

总: SpringBoot 启动,基本本质就是加载各种配置信息,然后初始化 IOC 容器并返还。

分: 在其启动的过程中会做这么几个事情。

首先,当我们在启动类执行 SpringApplication.run 运行这行代码的时候,在它的构造方法内部其实会做两件事情:

  1. 创建 SpringApplication 对象;

  2. 执行 run 方法。

其次,在创建 SpringApplication 对象的时候,在它的构造方法内部主要做 3 个事情:

  1. 确认 web 应用类型,一般情况下是 Servlet 类型,这种类型的应用,将来会自动启动一个 Tomcat。

  2. spring.factories 配置文件中,加载默认的 ApplicationContextInitializer 和 ApplicationListener。

  3. 记录当前用的主启动类(项目中被@SpringBootApplicaiton注解的类),将来做初始化使用。


最后,对象创建完了以后,再调用该对象的 run 方法,在该方法内部主要做 4 个事情:

  1. 准备 Environment 对象,它里面会封装一些当前应用运行环境的参数,比如环境变量等等。

  2. 实例化容器,这里仅仅只是创建 ApplicationContext 对象。

  3. 容器创建好了以后,会为容器做一些准备工作,比如为容器设置 Environment、BeanFactoryPostProcessor / 后置处理器,并加载主类对应的 BeanDefinition。

  4. 刷新容器,就是我们常说的 refresh,在这里会真正的创建 Bean 实例。

总: 总结一下我们说的,其实 SpringBoot 启动的时候核心就两步:

  • 创建 SpringApplication 对象

  • 以及 run 方法的调用

在 run 方法中会真正的实例化容器,并创建容器中需要的 Bean 实例,最终返回。

相关推荐
q_191328469511 小时前
基于SpringBoot+Vue.js的高校竞赛活动信息平台
vue.js·spring boot·后端·mysql·程序员·计算机毕业设计
Kiyra12 小时前
八股篇(1):LocalThread、CAS和AQS
java·开发语言·spring boot·后端·中间件·性能优化·rocketmq
木风小助理13 小时前
在 Spring Boot 中实现 JSON 字段的蛇形命
spring boot·后端·json
小徐Chao努力13 小时前
【Langchain4j-Java AI开发】10-框架集成(Spring Boot & Quarkus)
java·人工智能·spring boot
毕设源码-赖学姐14 小时前
【开题答辩全过程】以 基于Springboot的球场管理平台的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
BIBI204914 小时前
Windows 上配置 Nacos Server 3.x.x 使用 MySQL 5.7
java·windows·spring boot·后端·mysql·nacos·配置
不思念一个荒废的名字14 小时前
【黑马JavaWeb+AI知识梳理】Web后端开发06 - SpringBoot原理篇
spring boot·后端
invicinble14 小时前
Data Validation数据校验机制与内容
spring boot
爱吃山竹的大肚肚15 小时前
优化SQL:如何使用 EXPLAIN
java·数据库·spring boot·sql·spring
Kiyra15 小时前
Spring Boot Starter 自定义开发:封装中间件配置
spring boot·redis·后端·缓存·中间件·性能优化·rocketmq