中通面经
1、Springboot的启动流程是怎么样的?
new SpringApplication():
在SpringApplication的构造函数中,调用了一个initialize方法,所以他的初始化逻辑直接看这个initialize方法就行了。
1、添加源:将提供的源(通常是配置类)添加到应用的源列表中
2、设置web环境:判断应用是否应该运行在web环境中,这会影响后续的web相关配置
3、加载初始化器:从spring.factories文件中加载所有列出的ApplicationContextInitializer实现,并将他们设置到SpringApplication实例中,以便在应用上下文的初始化阶段执行他们。
4、设置监听器:加载和设置ApplicationListener实例,以便应用能够响应不同的事件。
5、确定主应用类:确定主应用类,这个应用程序类通常是包含public static void main(String[] args)方法的类,是启动整个SpringBoot应用的入口点
这里的第三步,加载初始化器这一步是springboot的自动配置的核心,因为在这一步会从spring.factories文件中加载并实例化指定类型的类。
SpringApplication.run
这个方法是SpringApplication类的核心,用于启动Spring Boot应用。
- 启动&停止计时器
- 获取和启动监听器
- 装配环境参数(application.properties文件中的属性,环境变量、系统属性等)
- 打印Banner
- 创建应用上下文(到这一步真的开始启动了,第一步就是先要创建一个Spring的上下文出来,只有有了这个上下文才能进行Bean的加载、配置等工作)
- 准备上下文
- 刷新上下文(Spring启动的核心步骤,实例化所有的bean、设置他们之间的依赖关系以及执行其他的初始化任务、创建BeanFactory实例化Bean、web容器的启动)
总体框架