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

springboot的启动流程原理

目录

 一:入口简介:

二。创建SpringApplication对象

1.推倒出当前项目的启动类型

2.设置Initializer初始化器

3.初始化Listerner监听器

4.反推出main方法所在的class对象。

三.运行SpringApplication#run(java.lang.String...)方法

1):获取运行监听器:

2)发布启动过程中各阶段事件 

3)准备环境Environment

4)创建ApplicationContext IOC容器

5)准备ApplicationContext IOC容器的基本信息 

6)刷新IOC容器 

7)调用所有runners 


 一:入口简介:

首先,分析启动流程,就要 找到入口.

启动流程的入口方法就是这个run方法:

点进去之后就是这样: 

主要分为了两个步骤:

1.创建springBootApplication对象   

2.运行SpringApplication#run(java.lang.String...)方法;

上面说了主要分为两个步骤,那么接下来我们就逐个分析,先来分析 创建SpringApplication对象。

二。创建SpringApplication对象

我们从这里点击进去: 

就会看到这些:

 其中主要分为四个步骤:

1.推倒出当前项目的启动类型

上面的第一个步骤点击进来:可以看到,根据是否引入特定的依赖来我看我们的项目类型。我们项目是servlet:

2.设置Initializer初始化器

上面第二部点进来,发现最终是:

springboot通过加载配置在spring.factories文件中的ApplicationContextInitializer对应的类型并实例化,并将加载的数据存储在了 initializers 成员变量中。:

补充一下,第二步骤的点击时候的参数ApplicationContextInitializer就是从这里拿到的: 

3.初始化Listerner监听器

上面的第三步点进来,发现是将其存到了变量中:

springboot通过加载配置在spring.factories文件中的ApplicationListener对应的类型并实例化,并将加载的数据存储在了 listeners 成员变量中。

补充,上面的 ApplicationListener是从这里拿的:

4.反推出main方法所在的class对象。

 listeners.starting(bootstrapContext, this.mainApplicationClass);

由上面第四步点击进来后,从执行的堆栈中拿出信息,我们看到执行的就是main方法:

我们debug一下,就可以看到拿到的是我们启动的类: 

三.运行SpringApplication#run(java.lang.String...)方法

下面代码是run方法里的:这个是spring的核心启动方法:其中包括了准备环境、配置文件的解析、创建IOC容器、内嵌servlet web容器的启动、事件广播等核心逻辑。 

    public ConfigurableApplicationContext run(String... args) {long startTime = System.nanoTime();DefaultBootstrapContext bootstrapContext = this.createBootstrapContext();ConfigurableApplicationContext context = null;this.configureHeadlessProperty();//第一步:获取运行监听器SpringApplicationRunListeners listeners 

http://www.mrgr.cn/news/4920.html

相关文章:

  • jenkins 禁用脚本安全性
  • 养猫家庭必备好物——宠物空气净化器,让浮毛无处可逃
  • 文件操作2(函数的专栏)
  • MongoDB如何时间范围查询
  • 数据持久层框架MyBatis
  • 【原创】解决七彩虹显卡开启turbo模式后,电脑开机蜂鸣器1长3短,自检码卡AA的问题
  • 阮一峰《TypeScript 教程》学习笔记一类型系统、数组、元祖
  • 关于 瑞芯微的 adb 的使用
  • FreeRTOS学习笔记(四)——延时函数,列表,软件定时器,低功耗模式,内存管理
  • 为什么Qt源码中要用d_ptr和q_ptr
  • 案例分享—优秀国外界面设计配色舒适的原因
  • python之numpy(3 矩阵属性及矩阵运算)
  • 位运算专题
  • 基于Django的boss直聘数据分析可视化系统的设计与实现
  • 在 CentOS 7 上配置中国源
  • OD C卷 - 幼儿园篮球游戏
  • 面试准备算法
  • eNSP 华为单臂路由实现VLAN间通信
  • 有关缓存的一些面试知识
  • 在网站文章中,‌<br>标签对SEO的影响及优化策略