SpringBoot启动流程

实例化流程

  1. 推断应用类型,创建的是REACTIVE应用、SERVlET应用、NONE三种中的一种
  2. 使用SpringFactoreisLoader查找并加载classpath下META-INF/spring.factories文件中所有可用的ApplicationContextInitializer
  3. 使用SpringFactoreisLoader查找并加载classpath下META-INF/spring.factories文件中所有可用的ApplicationContextListener
  4. 推断并设置main方法

run()方法探求

  1. 通过SpringFactoreisLoader加载 classpath下META-INF/spring.factories文件 ,创建并获取 SpringApplicationRunListener对象
  2. 然后由 SrpingApplicationRunListener来发出starting消息
  3. 创建参数,并配置当前SpringBoot应用将要使用的Eviroment
  4. 完成之后,依然由SpringApplicationRunListener来发出enviromentPrepared消息
  5. 创建ApplicationContext
  6. 初始化ApplicationContext, 并设置Environment,加载相关配置等
  7. SpringApplicationRunListener来发出contextPrepared消息,告知SpringBoot应用使用的ApplicationContext准备完毕
  8. 将各种beans装载入ApplicationContext,继续由SpringApplicaitonRunListener发出contextLoaded消息,告知Spring Boot应用使用的Application Context已装填OK
  9. refresh ApplicationContext,完成IOC容器可用的最后一步
  10. 由SpringApplicationRunListener来发出started消息
  11. 调用callRuners(...)方法,让实现了ApplicationRunnerCommandLineRunner接口类的run方法得以执行,用于在Spring应用上下文准备完毕后,执行一些额外操作。从而完成最终的程序启动
  12. SpringApplicationRunListener来发出runing消息,告知程序已运行起来了.

[Spring] SpringBoot启动流程的更多相关文章

  1. SpringBoot启动流程解析

    写在前面: 由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图ke ...

  2. SpringBoot启动流程分析(五):SpringBoot自动装配原理实现

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  3. SpringBoot启动流程分析(六):IoC容器依赖注入

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  4. SpringBoot启动流程分析(一):SpringApplication类初始化过程

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  5. SpringBoot启动流程分析(二):SpringApplication的run方法

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  6. SpringBoot启动流程分析(三):SpringApplication的run方法之prepareContext()方法

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  7. SpringBoot启动流程分析(四):IoC容器的初始化过程

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  8. SpringBoot启动流程及其原理

    Spring Boot.Spring MVC 和 Spring 有什么区别? 分别描述各自的特征: Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等:但他们的 ...

  9. springboot启动流程(一)构造SpringApplication实例对象

    所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 启动入口 本文是springboot启动流程的第一篇,涉及的内容是SpringApplicat ...

  10. Spring Boot启动流程分析

    引言 早在15年的时候就开始用spring boot进行开发了,然而一直就只是用用,并没有深入去了解spring boot是以什么原理怎样工作的,说来也惭愧.今天让我们从spring boot启动开始 ...

随机推荐

  1. [OpenCV实战]7 使用YOLOv3和OpenCV进行基于深度学习的目标检测

    目录 1 YOLO介绍 1.1 YOLOv3原理 1.2 为什么要将OpenCV用于YOLO? 1.3 在Darknet和OpenCV上对YOLOv3进行速度测试 2 使用YOLOv3进行对象检测(C ...

  2. Flink mini-batch "引发" 的乱序问题

    问题描述 近期业务反馈, 开启了 mini-batch 之后, 出现了数据不准的情况, 关掉了 mini-batch 之后, 就正常了, 因此业务方怀疑,是不是 Flink 的 mini-batch ...

  3. AtCoder Regular Contest 148 B - dp

    题面 For a string \(T\) of length \(L\) consisting of d and p, let \(f(T)\) be \(T\) rotated \(180\) d ...

  4. Codeforces Round #569 (Div. 2)

    题解 Codeforces Round #569 (Div. 2) rank:1306/11165 rate: +43 1424 → 1467 Codeforces Round #569 (Div. ...

  5. echart大坑总结~~echarts呈现的数据刷新不完全/echarts画图时tooltip不会更新

    谨以此文记录在使用echarts中遇到的各种大坑或者小坑,陆续更新加入新坑 欢迎朋友们一起提坑,我们势必绕过它们,愿我们永不再入坑~ 坑一:echarts图表重新赋值数据,图表显示会存在一部分原来的数 ...

  6. JavaScript 评测代码运行速度

    一.使用 performance.now() API 在 JavaScript 中,可以使用 performance.now() API 来评测代码的运行速度.该 API 返回当前页面的高精度时间戳, ...

  7. 剑指 Offer 32 - I. 从上到下打印二叉树(java解题)

    目录 1. 题目 2. 解题思路 3. 数据类型功能函数总结 4. java代码 1. 题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印.   例如: 给定二叉树: [3,9, ...

  8. Nginx03 虚拟主机

    1 虚拟主机 虚拟主机使用特殊的软硬件技术,把一台运行在因特网上的服务器主机分成一台台"虚拟"的主机,每一台虚拟主机都具有独立的域名,具有完整的Internet服务器(WWW.FT ...

  9. JAVA虚拟机11-Class文件结构

    1.平台无关性和语言无关性 Oracle公司以及其他虚拟机发行商发布过许多可以运行在各种不同硬件平台和操作系统上的Java虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序的&q ...

  10. P9_组件-swiper和swiper-item的基本用法

    swiper 和 swiper-item 组件的基本使用 实现如图的轮播图效果: swiper 组件的常用属性 list.wxml <swiper class="swiper-cont ...