sprigboot初始化流程

2024-01-27 04:58
文章标签 流程 初始化 sprigboot

本文主要是介绍sprigboot初始化流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

初始化流程

过程

  • 创建 SpringApplication
    • 保存了一些信息
    • 判定当前应用的类型,ClassUtils.servlet
    • bootstrappers:初始启动引导器(List< booterstrapper>),去 spring.factories 文件中找 org.springframework.boot.Bootstrapper
    • ApplicationContextInitializer 初始化器:去 spring.factories 文件中找 ApplicationContextInitializer
      • List<ApplicationContextInitializer<?>> initializer
    • ApplicationListener:找一个应用的监听器,去 spring.factories 文件中找 ApplicationListener
      • List< ApplicationListener<?>> listeners
  • 运行 SpringApplication
    • StopWatch
    • 记录应用的启动时间
    • 创建引导上下文(Context环境)
      • 获取到所有之前的 bootstrappers 挨个执行 initialize() 来完成对引导启动器上下文环境设置
    • 让当前应用进入 headless 模式。java.awt.headless
    • 获取所有的 RunListener(运行时监听器)【为了方便所有Listener进行时间感知】
      • getSpringFactoriesInstancesspring.factoriesSpringApplicationRunListener.class
    • 遍历所有的 SpringApplicationRunListener 调用 starting 方法
      • 相当于通知所有感兴趣系统正在启动过程的人,项目正在starting。
    • 保存命令行参数:ApplicationArguments
    • 准备环境prepareEnvironment()
      • 返回或创建一个基础环境信息对象:StandardServletEnvironment
      • 配置环境信息对象
        • 读取所有的配置源属性值
      • 绑定环境信息
      • 监听器调用 listener.environmentPrepared(),通知所有的监听器当前环境准备完成
    • 创建 IOC 容器:createApplicationContext()
      • 根据项目类型(Servlet)创建容器
      • 当前会创建 AnnotationConfigServletWebServerApplicationContext
    • 准备 ApplicationContext IOC容器的基本信息:prepareContext()
      • 保存环境信息
      • IOC容器的后置处理流程
      • 应用初始化器:applyInitializers
        • 遍历所有的 ApplicationContextInitializer,调用 initizlie(),来对 IOC容器进行初始化扩展功能
        • 遍历所有的listener调用contextPreparedEventPublishRunListener通知所有监听器contextPrepared
      • 所有的监听器,调用 ContextLoaded,通知所有的监听器contextPrepared
    • 刷新IOC容器。refreshContext
      • 创建容器中的所有组件
    • 容器刷新文成后工作。afterRefresh
    • 所有监听器调用 listeners.started(context),通知所有监听器started
    • 调用所有的 runners。callRunners()
      • 获取容器中的ApplicationRunner
      • 获取容器中的CommandLineRunner
      • 合并所有 runner 并按照 @Order 进行排序
      • 遍历所有的 runner,调用 run 方法
    • 如果以上有异常
      • 调用 Listener 的 failed()
    • 调用所有监听器的 running 方法 listeners.running(context)。通知所有监听器 running
    • 如果running有异常
      • 调用所有 Listener 的 failed()
      • 通知所有监听器 failed
public interface BootStrapper{void initialize(BootstrapRegistry registry);
}
@FuncationalInterface
public interface ApplicationRunner{void run(ApplicationArguments args) throws Exception;
}
@FuncationalInterface
public interface CommandLineRunner{void run(String... args) throws Exception;
}

这篇关于sprigboot初始化流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/649115

相关文章

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo