SpringBoot 源码分析 - SpringApplication启动流程

Spring Boot 的启动流程主要由 SpringApplication 类来驱动,它封装了 Spring 应用程序的初始化和运行逻辑。下面是对 SpringApplication 启动流程的一个概要分析:

1. 创建 SpringApplication 实例

启动流程通常从创建一个 SpringApplication 实例开始。你可以通过传递主配置类(如 MyApplication.class)或者一个包含多个配置类的数组给构造函数来创建它。此外,还可以提供一个可选的 ApplicationContextInitializerApplicationListener 列表来定制上下文的初始化过程和监听应用事件。

2. 初始化 ApplicationArguments

SpringApplication 会初始化 ApplicationArguments 对象,该对象提供了对命令行参数和非选项参数(即非 --key=value 格式的参数)的访问。

3. RunListeners 聚集

Spring Boot 收集所有注册的 RunListener,这些监听器用于监听应用程序启动和关闭过程中的关键事件。

4. Banner 初始化

接下来,SpringApplication 初始化 Banner,这是在应用程序启动时打印到控制台的一段可定制信息。默认情况下,Spring Boot 使用了一个包含版本信息的ASCII艺术横幅,但你可以自定义它或完全禁用它。

5. 应用上下文的准备

这一阶段包括以下步骤:

  • 环境准备:根据需要创建或调整 Environment,这可能包括加载默认属性、激活profiles等。
  • 应用上下文初始化:决定使用哪种类型的 ApplicationContext(通常是 AnnotationConfigApplicationContext),并配置其设置。
  • 配置源的加载:加载配置文件(如 application.properties 或者 YAML 文件)、命令行参数和其他外部配置源。
  • 初始化 Bean 定义:扫描并注册 @Component, @Service, @Repository, @Controller 等注解标记的类作为 Spring Beans。

6. 应用事件发布

在不同的启动阶段,SpringApplication 会发布各种 ApplicationEvent,允许 ApplicationListener 监听并响应这些事件,比如 ApplicationStartingEvent, ApplicationEnvironmentPreparedEvent, ContextRefreshedEvent 等。

7. 调用 Runners

一旦上下文准备完毕,Spring Boot 会查找实现了 CommandLineRunnerApplicationRunner 接口的 Bean,并调用它们的 run 方法。这是执行启动后任务的常见方式。

8. 自动配置与启动Web服务器(如果适用)

对于Web应用,Spring Boot 会自动配置嵌入式Web服务器(如Tomcat、Jetty或Undertow),并启动它。这个过程基于 Spring-web 模块和 spring-boot-starter-web 的自动配置逻辑。

9. 应用运行

至此,Spring Boot 应用已经完全启动并准备好处理请求(对于Web应用而言)。

10. 关闭钩子

Spring Boot 注册了一个 JVM 关闭钩子,确保当应用接收到终止信号时能优雅地关闭,包括调用 DisposableBean 接口的 destroy 方法和 @PreDestroy 注解的方法。

整个启动流程体现了 Spring Boot 的“约定优于配置”原则,旨在简化Spring应用的搭建和运行过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值