springboot 启动原理

张开发
2026/4/15 21:18:09 15 分钟阅读

分享文章

springboot 启动原理
一、SpringBoot 启动核心流程总结入口SpringApplication.run()构造SpringApplication通过SpringApplicationRunListeners发布启动事件准备Environment加载配置、yml/properties创建ApplicationContext容器核心refresh() 容器扫描、注册Bean、实例化、启动Web服务器发布ApplicationStartedEvent执行ApplicationRunner/CommandLineRunner发布ApplicationReadyEvent启动完成二、Mermaid 流程图可直接复制渲染main 方法调用SpringApplication.run()new SpringApplication()推断应用类型Servlet/Reactive/NONE加载 SpringFactoriesApplicationContextInitializer、ApplicationListener执行 run 方法主体获取 SpringApplicationRunListeners开始广播事件发布 ApplicationStartingEvent准备 Environment加载application.yml/bootstrap/系统属性发布 ApplicationEnvironmentPreparedEvent创建 ApplicationContext注解配置Web容器发布 ApplicationContextInitializedEventprepareContext 准备上下文加载source、执行初始化器发布 ApplicationPreparedEvent【核心】refreshContext 刷新容器invokeBeanFactoryPostProcessors 扫描BeanregisterBeanPostProcessors实例化单例BeanonRefresh 启动Web服务器Tomcat/Undertow/Jettyrefresh 完成发布 ApplicationStartedEvent执行 ApplicationRunner、CommandLineRunner发布 ApplicationReadyEvent启动完成接收请求三、逐阶段源码级讲解1. 入口 run()publicstaticConfigurableApplicationContextrun(Class?primarySource,String...args){returnnewSpringApplication(primarySource).run(args);}2. 构造 SpringApplication推断 Web 应用类型从META-INF/spring.factories加载ApplicationContextInitializerApplicationListener3. SpringApplicationRunListeners 事件调度这是启动“ lifecycle 管家”依次发布ApplicationStartingEventApplicationEnvironmentPreparedEventApplicationPreparedEventApplicationStartedEventApplicationReadyEvent4. Environment 准备加载系统变量命令行参数application.yml/application.properties激活 profile5. 创建 ApplicationContextWeb 应用AnnotationConfigServletWebServerApplicationContext非 WebAnnotationConfigApplicationContext6.核心refresh()最重要Overridepublicvoidrefresh()throwsBeansException,IllegalStateException{super.refresh();}内部关键步骤扫描包、解析 BeanDefinition实例化单例 Bean执行onRefresh()→ 启动 Tomcat/Undertow完成 IoC 初始化7. 启动完成执行 Runner发布 Ready 事件服务可以对外提供访问四、SpringApplicationRunListeners 与事件关系SpringApplicationRunListenersApplicationStartingEventApplicationEnvironmentPreparedEventApplicationPreparedEventApplicationStartedEventApplicationReadyEventEventListener监听处理L2L3L4L5五、面试满分一句话总结SpringBoot 启动就是通过 SpringApplication 准备环境、创建容器、利用 SpringApplicationRunListeners 在生命周期各阶段发布事件最终通过 refresh() 完成 IoC 初始化并启动 Web 服务器最后执行 Runner 并发布就绪事件。

更多文章