内容提要
Spring Boot应用启动分为三个主要阶段:1️⃣ 启动阶段:JVM启动,执行SpringApplication.run(),准备环境和配置。2️⃣ 上下文初始化阶段:创建并刷新应用上下文,扫描和注入Bean,启动嵌入式服务器(如有)。3️⃣ 启动后阶段:执行CommandLineRunner和ApplicationRunner,应用准备好处理请求。
关键要点
-
Spring Boot应用启动分为三个主要阶段:启动阶段、上下文初始化阶段和启动后阶段。
-
启动阶段包括JVM启动和执行SpringApplication.run(),准备环境和配置。
-
上下文初始化阶段创建并刷新应用上下文,扫描和注入Bean,启动嵌入式服务器(如有)。
-
启动后阶段执行CommandLineRunner和ApplicationRunner,应用准备好处理请求。
-
JVM启动并加载主类,执行SpringApplication.run()方法以启动应用。
-
SpringApplication初始化,加载应用配置和环境属性,准备应用上下文。
-
创建Spring应用上下文,管理Bean、配置和依赖关系。
-
加载ApplicationContextInitializers和SpringApplicationRunListeners。
-
准备环境变量、应用配置文件和命令行参数,确定活动和默认配置文件。
-
刷新应用上下文,扫描注解类,实例化Bean并管理其生命周期。
-
如果是Web应用,自动启动嵌入式Web服务器,监听请求。
-
执行CommandLineRunner和ApplicationRunner,运行初始化逻辑。
-
触发ApplicationReadyEvent,表示应用已完全启动并准备好处理请求。
-
Web应用保持运行状态,等待HTTP请求;非Web应用在运行初始化逻辑后退出。
延伸解读
启动阶段的重要性
Spring Boot应用的启动阶段是整个应用生命周期的基础,JVM的启动和SpringApplication.run()的执行决定了应用的运行环境和配置。理解这一阶段的细节有助于开发者在遇到启动问题时快速定位问题根源。
上下文初始化的关键步骤
在上下文初始化阶段,Spring会扫描并实例化注解标记的类,这一过程对依赖注入至关重要。开发者应关注Bean的生命周期管理,以确保应用的稳定性和性能。
启动后阶段的应用准备
启动后阶段通过执行CommandLineRunner和ApplicationRunner来完成初始化逻辑,这对于需要在应用启动后进行特定操作的场景尤为重要。开发者应合理利用这些接口来增强应用的启动灵活性。
延伸问答
Spring Boot应用启动的主要阶段有哪些?
Spring Boot应用启动分为三个主要阶段:启动阶段、上下文初始化阶段和启动后阶段。
在Spring Boot启动阶段,JVM执行了哪些操作?
在启动阶段,JVM启动并加载主类,执行SpringApplication.run()方法以启动应用。
上下文初始化阶段的主要任务是什么?
上下文初始化阶段创建并刷新应用上下文,扫描和注入Bean,启动嵌入式服务器(如有)。
Spring Boot如何处理应用配置和环境属性?
Spring Boot在启动阶段加载应用配置和环境属性,并准备应用上下文。
什么是CommandLineRunner和ApplicationRunner,它们在启动后阶段的作用是什么?
CommandLineRunner和ApplicationRunner是用于在应用启动后执行初始化逻辑的接口,它们在启动后阶段被执行。
Spring Boot应用在启动后如何保持运行状态?
对于Web应用,Spring Boot保持应用运行状态,等待HTTP请求;非Web应用在运行初始化逻辑后退出。