Spring Boot启动过程?

devtools/2025/2/28 8:10:53/

目录

1. 启动入口

2. SpringApplication 初始化

3. 准备环境

4. 创建应用上下文(ApplicationContext)

5. 准备应用上下文

6. 刷新应用上下文

7. 启动 Web 服务器(若为 Web 应用)

8. 发布 ApplicationStartedEvent 事件

9. 执行 Runner

10. 发布 ApplicationReadyEvent 事件


1. 启动入口

Spring Boot 应用的启动从 main 方法开始,main 方法通常位于一个带有 @SpringBootApplication 注解的类中。@SpringBootApplication 是一个组合注解,它包含了 @Configuration(标识该类为配置类,可定义 Bean 等配置)、@EnableAutoConfiguration(开启自动配置功能,依据项目依赖自动配置相关组件)和 @ComponentScan(用于扫描指定包及其子包下的组件,如 @Component@Service@Repository@Controller 等注解标注的类)。示例代码如下:

java">@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

2. SpringApplication 初始化

SpringApplication.run() 方法会创建一个 SpringApplication 实例,并调用其 run 方法。该实例的初始化过程包含以下关键步骤:

  • 推断应用类型:依据类路径上的依赖来判断应用类型,比如包含 spring-boot-starter-web 依赖则推断为 Servlet 应用,若包含相关响应式编程依赖则推断为 Reactive 应用等。
  • 设置初始化器(Initializers):通过 SpringFactoriesLoader 从 META-INF/spring.factories 文件中加载并应用 ApplicationContextInitializer。这些初始化器可在应用上下文创建前对其进行定制化配置,例如设置属性源等。
  • 设置监听器(Listeners):同样借助 SpringFactoriesLoader 加载并应用 ApplicationListener,用于监听应用启动过程中的各类事件,如环境准备完成事件、应用上下文初始化事件等,以便在不同阶段执行相应逻辑。
  • 推断主应用类:通过堆栈跟踪的方式推断出主应用类,即包含 main 方法且带有 @SpringBootApplication 注解的类。

3. 准备环境

在 run 方法中,Spring Boot 会进行应用环境(Environment)的准备工作,具


http://www.ppmy.cn/devtools/163304.html

相关文章

macos下cocoapods的学习

step1:升级ruby $ /bin/bash -c " $ (curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" $ brew update $ brew install ruby $ echo export PATH"/usr/local/opt/ruby/bin:$PATH" >> ~/.bash_profile …

STM32编译过程

STM32编译过程 1. 编译过程介绍2. 程序的组成、存储与运行3. 编译工具链3.1 armcc 工具3.2 armasm 工具3.3 armlink 工具3.4 armar 工具3.5 fromelf 工具 4. MDK工程的文件类型 1. 编译过程介绍 编译MDK 软件使用的编译器是 armcc 和 armasm,它们根据每个 c/c 和汇编…

MAC 安装Tensorflow简单方法

MacOS M1 pro安装tensorflow 1、环境配置(必需) PYTHON版本:3.11.0,python采用homebrew安装。(已有python或更高版本可跳过,更高版本未经过测试,题主自认为可行) brew install pyt…

AWS S3 如何设置公开访问权限?

1.让整个bucket都有公开访问权限 1.1关闭【阻止公共读】 1.2关闭ACL访问控制 1.3打开桶策略 这样桶内所有的图片就能访问了 2.只开放特定文件让其具有访问权限? 2.1关闭【阻止公共读】 如之前的图示 2.2打开ACL控制 2.3单个文件打开公共读

go 查看版本

个人学习笔记 1. 打开终端(或命令提示符) 在 Windows 上,使用 cmd 或 PowerShell。在 macOS 或 Linux 上,使用终端应用程序。 2. 运行以下命令 go version 3. 查看输出 命令执行后,终端会显示已安装的 Go 版本&…

VSCode+PlatformIO报错 找不到头文件

如图示,找不到目标头文件 demo工程运行正常,考虑在src文件夹内开辟自己的代码,添加后没有找到 找了些资料,大概记录如下: 1、c_cpp_properties.json 内记录 头文件配置 .vscode 中,此文件是自动生成的&a…

在线抽奖系统——管理员登录

目录 获取验证码 时序图 集成阿里云短信服务 SMSUtil 验证码生成 约定前后端交互接口 controller 层接口设计 Service 层接口设计 Redis sendVerificationCode getVerificationCode 接口测试 JWT JWTUtil 定义拦截器 配置拦截路径 用户登录 时序图 验证码登…

Ubuntu+deepseek+Dify本地部署

1.deepseek本地部署 在Ollama官网下载 需要魔法下载 curl -fsSL https://ollama.com/install.sh | sh 在官网找到需要下载的deepseek模型版本 复制命令到终端 ollama run deepseek-r1:7b 停止ollama服务 sudo systemctl stop ollama # sudo systemctl stop ollama.servi…