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

相关文章

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

SpringIOC容器Bean初始化和销毁回调方式

《SpringIOC容器Bean初始化和销毁回调方式》:本文主要介绍SpringIOC容器Bean初始化和销毁回调方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录前言1.@Bean指定初始化和销毁方法2.实现接口3.使用jsR250总结前言Spring Bea