中通面经

codingbao / 2024-09-26 / 原文

中通面经

1、Springboot的启动流程是怎么样的?

image-20240926101402512

image-20240926102408015

new SpringApplication():

在SpringApplication的构造函数中,调用了一个initialize方法,所以他的初始化逻辑直接看这个initialize方法就行了。

image-20240926102425594

1、添加源:将提供的源(通常是配置类)添加到应用的源列表中

2、设置web环境:判断应用是否应该运行在web环境中,这会影响后续的web相关配置

3、加载初始化器:从spring.factories文件中加载所有列出的ApplicationContextInitializer实现,并将他们设置到SpringApplication实例中,以便在应用上下文的初始化阶段执行他们。

4、设置监听器:加载和设置ApplicationListener实例,以便应用能够响应不同的事件。

5、确定主应用类:确定主应用类,这个应用程序类通常是包含public static void main(String[] args)方法的类,是启动整个SpringBoot应用的入口点

这里的第三步,加载初始化器这一步是springboot的自动配置的核心,因为在这一步会从spring.factories文件中加载并实例化指定类型的类。

image-20240926103122051

image-20240926103149188

SpringApplication.run

这个方法是SpringApplication类的核心,用于启动Spring Boot应用。

image-20240926103438112

  • 启动&停止计时器
  • 获取和启动监听器
  • 装配环境参数(application.properties文件中的属性,环境变量、系统属性等)
  • 打印Banner
  • 创建应用上下文(到这一步真的开始启动了,第一步就是先要创建一个Spring的上下文出来,只有有了这个上下文才能进行Bean的加载、配置等工作)
  • 准备上下文
  • 刷新上下文(Spring启动的核心步骤,实例化所有的bean、设置他们之间的依赖关系以及执行其他的初始化任务、创建BeanFactory实例化Bean、web容器的启动)

总体框架

image-20240926104209907