当前位置: 首页 > news >正文

SpringBoot启动流程

SpringBoot启动我总结一下分为三个阶段 1.启动前 2.启动 3.启动后

  • 启动前

  1. 推断应用类型 ,判断是web应用还是非web应用,是servlet应用还是webflux应用。
  2. SpringFactoriesLoader加载META-INF/spring.factories的配置文件,并加载ApplicationContextInitializerApplicationListener的实现类。
  • 启动

  1. 启动计时器并注册shutdownhook钩子,创建一个 BootstrapContext用于接收配置中心的远程配置,发布第一个事件:ApplicationStartingEvent
  2. 加载配置环境Environment
  • 这一步会加载所有的配置属性,如 application.properties/yaml、命令行参数、BootstrapContext的远程配置等。完成后会发布 ApplicationEnvironmentPreparedEvent 事件。
  1. 根据推断出的应用类型创建对应的ApplicationContext
  2. PrepareContext准备上下文
    1. Environment关联到ApplicationContext
    1. 遍历并调用所有 ApplicationContextInitializerinitialize 方法
    1. 将启动类作为主配置类注册( @SpringBootConfiguration)
    1. 发布 ApplicationContextInitializedEventApplicationPreparedEvent 事件
  1. RefreshContext刷新上下文(包含启动完整的Bean生命周期)
    1. 执行BeanFactoryPostProcessor,其中子类ConfigurationClassPostProcessor会去解析注册的主配置类,发现了@EnableAutoConfiguration注解就会调用导入的AutoConfigurationImportSelector,这个类会去加载META-INF/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,并根据@ConditionalOnXXX注解判断是否加载,最终注册成BeanDefinition
    1. 注册BeanPostProcessor,创建内嵌的Web服务器,然后实例化所有的BeanDefinition(bean的生命周期)
    1. bean实例化
    1. 设置bean的对象属性
    1. 执行Aware接口(BeanNameAware, BeanFactoryAware)
    1. BeanPostProcessor前置处理
    1. InitializingBean的afterPropertiesSet方法
    1. 自定义的init方法
    1. BeanPostProcessor后置处理
    1. 注册bean的销毁回调钩子
      到此bean的初始化完成,可以使用了。
  • 启动后

  1. 调用 ApplicationRunnerCommandLineRunner的run方法,并最终发布 ApplicationReadyEvent

至此容器启动成功

http://www.hskmm.com/?act=detail&tid=9640

相关文章:

  • NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控一站式建设方案
  • 移远模组使用移远云平台对接指令
  • 解码C语言关键字
  • 接龙大师微信小程序管理系统:一站式社群信息收集与活动管理解决方案
  • Windows环境中安装Zookeeper
  • YOLOv7安全评估揭示11个漏洞:RCE攻击与模型差异风险
  • ​​电流探头选型技术指南:精准捕获电流信号的艺术​​
  • 读人形机器人16本地制造的环境和经济效益
  • 详细介绍:【卷积神经网络详解与实例】10——经典CNN之GoogLeNet
  • openEuler 24.03 (LTS-SP2)安装mysql 8.4.5(glib.2.17)
  • wso2~api的高级限流策略
  • openEuler安装mysql矩阵
  • 【转载】达梦数据库物理备份与逻辑备份的区别
  • openEuler使用xtrabackup报libssl.so问题
  • jmeter中八大元件的执行顺序
  • Ubuntu 安装 JDK
  • EHOME视频平台EasyCVR视频分析设备平台监控摄像机的接入与智能视频分析
  • python+excel实现办公自动化学习 - 教程
  • 详细介绍:集成学习算法简介
  • 智投助手v0.0.4 发布
  • Kaggle的[公共数据集平台]
  • UE5 MPCook 时序图
  • P7435 简单的排列计数
  • Nexpose 8.21.0 for Linux Windows - 漏洞扫描
  • slurm启动验证命令
  • 天上的乌云不见了,但是没有下雨,那它们都去哪了呢?
  • 深入解析:多模态大模型3:TAViS
  • 基于STM32F103C8T6与DS18B20的温度测量系统
  • afx100.dll afrvidwindowmanager.dll afresu.dll afrcomputeserver.dll afckernel.dll aexplore_view. - 详解
  • UE5 增量 Cook