Springboot启动流程之ApplicationContext 创建

在文章 Springboot3.3.5 启动流程(源码分析) 中介绍了关键流程,本文详细介绍 AnnotationConfigServletWebServerApplicationContext 的创建。

备注: 本文未作任何申明时,默认 springboot 版本为 3.3.5

AnnotationConfigServletWebServerApplicationContext 类关系

Springboot 应用也是一个 spring 应用,下面我们先看看它的类关系:
class-relationship

AnnotationConfigServletWebServerApplicationContext 创建

创建入口

Springboot 中环境准备好后就开始创建应用上下文(ApplicationContext ), 它创建的是一个 ConfigurableApplicationContext。 在 web servlet 环境下通常创建的就是 AnnotationConfigServletWebServerApplicationContext。具体的创建位置位于 SpringApplication → run → createApplicationContext
在这里插入图片描述

创建流程

AnnotationConfigServletWebServerApplicationContext 创建详细时序图如下:请添加图片描述
从以上时序图中可以看到, AnnotationConfigServletWebServerApplicationContext创建流程非常简单,下面我们从源码看看它的创建:

    1. createApplicationContext
      在这里插入图片描述
    1. ApplicationContextFactory 创建 applicationContext
      在这里插入图片描述
    1. ServletWebServerApplicationContextFactory 具体实现类创建 applicationContext
      在这里插入图片描述
      • 3.1在实例化 AnnotationConfigServletWebServerApplicationContext 时,仅仅创建了一个 AnnotatedBeanDefinitionReaderClassPathBeanDefinitionScanner
        在这里插入图片描述
    1. AotDetector 探测是否启用了 aot(关于aot 这里就不做介绍,可以参考官方文档), 如果没有启用 aot 则创建 AnnotationConfigServletWebServerApplicationContext, 否则,创建 ServletWebServerApplicationContext.
      在这里插入图片描述
      AnnotationConfigServletWebServerApplicationContext 创建详细流程到此就介绍完了, 希望对各位小伙伴有所帮助。

.

### Spring Boot 启动流程中的容器创建过程解析 #### 1. 初始化阶段 当应用程序启动时,`SpringApplication` 类负责整个启动过程。该类通过 `run()` 方法来引导应用的运行,在此方法内部会调用一系列初始化操作[^2]。 #### 2. 创建 Bootstrap 上下文 在启动初期,`createBootstrapContext()` 方法会被调用来构建默认的 `DefaultBootstrapContext` 实例。这一步骤为后续的应用程序上下文准备了一个基础环境,并允许一些早期初始化工作被执行,比如设置某些必要的属性或资源[^3]。 ```java private DefaultBootstrapContext createBootstrapContext() { DefaultBootstrapContext bootstrapContext = new DefaultBootstrapContext(); this.bootstrapRegistryInitializers.forEach(initializer -> initializer.initialize(bootstrapContext)); return bootstrapContext; } ``` #### 3. 构建 Application Context (ApplicationContext) 紧接着,基于前面建立好的 Bootstrap 上下文,Spring Boot 将继续创建并配置主应用程序上下文 (`ApplicationContext`)。这是 Spring 容器的核心部分,它包含了所有的 Bean 定义以及它们之间的依赖关系。在此期间,还会处理各种自动配置逻辑,确保框架能够根据当前环境做出最优的选择。 #### 4. 加载配置文件与外部化配置 随着 ApplicationContext 的逐步完善,系统会读取 application.properties 或者 application.yml 文件以及其他形式的外部化配置信息。这些配置项可以覆盖掉默认的行为设定,从而让开发者更容易定制自己的项目特性[^1]。 #### 5. 执行自定义 Runner 接口实现 一旦所有准备工作完成之后,如果用户实现了 `ApplicationRunner` 或者 `CommandLineRunner` 接口,则会在最后时刻触发相应的回调函数。这类组件非常适合用于执行一次性任务,例如数据库迁移、缓存预热或者其他任何需要在服务完全可用之前完成的工作[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值