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

相关文章

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

C++/《C/C++程序编译流程》

程序的基本流程如图:   1.预处理        预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。 读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理将所有的“#define”删除,并且展开所有的宏定义处理所有的条件编译指令,如:“#if”、“