[db:标题]
摘要:SpringBoot的启动流程 下面的代码是SpingBoot启动类里最基础的代码,SpringBoot的启动的入口就在这里,本文是在SpringBoot3的基础上进行的梳理。 @SpringBootApplication public c
SpringBoot的启动流程
下面的代码是SpingBoot启动类里最基础的代码,SpringBoot的启动的入口就在这里,本文是在SpringBoot3的基础上进行的梳理。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在网上能搜到,各种博客和文章来讲解SpingBoot启动流程的,无一不是长篇大论的,把各个步骤,各个阶段执行的代码都贴出来。
确实,内容详尽固然有助于理解,但面试时只需记住主干流程即可,
谁在工作过程中,也不会无故的研究这个启动流程,心里有个大概的了解就可以了,如果实在隔得时间太长了,写代码时又真的会需要了解一下这个启动流程,那么直接在网上搜索,或者直接问AI都是可以的。
所以本次我总结这个启动流程的时候就是尽量的精简步骤,然后进行总结,让大家用自己的话,能给面试官解释清整个流程就行了。
另外还要说明一下,启动流程和实现自动装配不是一回事,启动流程里面是包括自动装配的。如果想了解SpringBoot是如何实现自动装配的,可以看之前写的文章【你来讲一下springboot的启动时的一个自动装配过程吧】
创建SpringBootApplication应用与刷新
首先最核心的一段代码SpringApplication.run(Application.class, args);这段代码会经历一系列的步骤,完成应用的初始化与启动。
这段代码的最后是会调用到SpringApplication.class的ConfigurableApplicationContext方法此方法里面执行的代码为(new SpringApplication(sources)).run(args),因此这个执行过程就分成的两部分,第一部分是new SpringApplication(sources)另一部分是.run(args)
public static ConfigurableApplicationContext run(Object[] sources, String[] args) {
return (new SpringApplication(sources)).run(args);
}
new SpringApplication(sources)
这个构造方法的代码如下图所示
弄明白了initialize()方法其实就可以了。
添加应用源 this.sources.addAll(Arrays.asList(sources));这段代码的是添加应用源的逻辑,将提供的源(通常是配置类)添加到应用的源列表中。
设置 Web 环境 this.deduceWebEnvironment();判断应用是否应该运行在 Web 环境中,这会影响后续的 Web 相关配置。
加载初始化器this.getSpringFactoriesInstances(ApplicationContextInitializer.class)从 spring.factories 文件中加载所有列出的 ApplicationContextInitializer实现,并将它们设置到 SpringApplication 实例中,以便在应用上下文的初始化阶段执行它们。
设置监听器this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class))加载和设置 ApplicationListener实例,以便应用能够响应不同的事件。
确定主应用类this.deduceMainApplicationClass(),这个主应用程序类通常是包含 public static void main(String[]args)方法的类,是启动整个 Spring Boot 应用的入口点。
SpringApplication::run(args)
此方法就是用于启动SpringBoot应用,也是核心流程所在。
1、启动计时器
stopWatch.start();启动计时器,用于记录启动耗时。
