Spring boot启动流程
Spring boot启动流程
本文根据网络资源整合。仅用来协助理解spring boot流程。
代码基于 spring-boot:4.0.1
一、启动入口
SpringApplication.run(MyApp.class, args);
二、核心启动流程
- 创建 SpringApplication 实例
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
// 推断web应用类型:NONE/SERVLET/REACTIVE
this.properties.setWebApplicationType(WebApplicationType.deduce());
// 从spring.factories加载所有ApplicationContextInitializer
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
// 从spring.factories加载所有ApplicationListener
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
// 推断主配置类(main方法所在类)
this.mainApplicationClass = deduceMainApplicationClass();
}
- 运行 run 方法
SpringApplication.java run方法精简
public ConfigurableApplicationContext run(String... args) {
// 2.1 创建并启动事件监听器
SpringApplicationRunListeners listeners = getRunListeners(args);
listeners.starting(bootstrapContext, this.mainApplicationClass);
// 2.2 封装启动参数
ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
// 2.3 准备环境:加载配置、激活profile
ConfigurableEnvironment environment = prepareEnvironment(listeners, bootstrapContext, applicationArguments);
// 2.4 打印banner
Banner printedBanner = printBanner(environment);
// 2.5 创建ApplicationContext(根据webApplicationType创建)
context = createApplicationContext();
// 2.6 准备上下文:设置环境、执行initializers、加载Bean定义
prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);
// 2.7 刷新上下文(核心IOC容器启动)
refreshContext(context);
// 2.8 刷新后的扩展钩子
afterRefresh(context, applicationArguments);
// 2.9 执行Runner接口(CommandLineRunner/ApplicationRunner)
callRunners(context, applicationArguments);
}
三、简化流程图
main()
└─ SpringApplication.run()
├─ ① 推断web类型
├─ ② 加载spring.factories (listeners/initializers)
├─ ③ 环境准备 (加载yml)
├─ ④ 创建ApplicationContext
├─ ⑤ prepareContext (执行Initializers)
├─ ⑥ refreshContext (IOC核心: Bean扫描、注册、自动配置)
├─ ⑦ afterRefresh (启动WebServer)
└─ ⑧ callRunners (执行Runner接口)
tag
- spring boot
- 启动

浙公网安备 33010602011771号