SpringBoot源码分析:SpringBoot启动源码(一)

这篇具有很好参考价值的文章主要介绍了SpringBoot源码分析:SpringBoot启动源码(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

SpringBoot启动的源码分为前期初始化,和后期启动两个部分,我们从这两个部分开始介绍。

二、前期初始化

SpringBoot前期初始化主要由下面三行代码组成。

SpringBoot源码分析:SpringBoot启动源码(一)

 进入SpringApplication.getSpringFactoriesInstances方法SpringBoot源码分析:SpringBoot启动源码(一)

 最终进入SpringFactoriesLoader.loadFactoryNames方法

SpringBoot源码分析:SpringBoot启动源码(一)

 最后SpringFactoriesLoader.loadSpringFactories会到spring.factories文件下加载对应的配置类。

SpringBoot源码分析:SpringBoot启动源码(一)

SpringBoot源码分析:SpringBoot启动源码(一)

 设置监听器的流程和设置初始化器的代码实现差不多,这里边不再缀述了。

SpringBoot源码分析:SpringBoot启动源码(一)

三、后期启动

后期启动主要分为八步,我将一一介绍。

(一)、 获取、启动运行过程监听器

这两段代码获取,并启动了监听器,重点在于启动监听器,我们继续往下看。

SpringBoot源码分析:SpringBoot启动源码(一)

 EventPublishingRunListener.starting方法利用多播器,将事件广播出去,这就是监听启动做的事情。

SpringBoot源码分析:SpringBoot启动源码(一)

(二)、 环境构建

这一步主要用于加载系统配置以及用户的自定义配置(application.properties),源码解释如下

SpringBoot源码分析:SpringBoot启动源码(一)

(三)、创建IOC容器

createApplicationContext创建了IOC容器。

SpringBoot源码分析:SpringBoot启动源码(一)

SpringBoot源码分析:SpringBoot启动源码(一)

(四)、创建IOC容器

在刷新容器之前做准备,其中有一个非常关键的操作:将启动类注入容器,为后续的自动化配置奠定基础。源码如下:

SpringBoot源码分析:SpringBoot启动源码(一)

prepareContext()源码解析如下图,内容还是挺多的:

SpringBoot源码分析:SpringBoot启动源码(一)

从上图可以看出步骤很多,下面将会详细介绍几个重点的内容。

1、调用初始化器

SpringApplication构建过程中设置的初始化器,从spring.factories取值的。执行的流程很简单,遍历执行,源码如下图:

SpringBoot源码分析:SpringBoot启动源码(一)

2、加载启动类,注入容器

这一步是将主启动类加载到IOC容器中,作为后续自动配置的入口。

SpringApplication构建过程中将主启动类放置在primarySources这个集合中,此时的getAllSources()即是从其中取值,如下图:

SpringBoot源码分析:SpringBoot启动源码(一)

这里取出的就是主启动类,当然你的项目中可能不止一个,接下来就是将其加载到IOC容器中了,源码如下:SpringBoot源码分析:SpringBoot启动源码(一)

经过SpringApplication.load---->>BeanDefinitionLoader.load---->>AnnotatedBeanDefinitionReader

.doRegisterBean---->>BeanDefinitionReaderUtils.registerBeanDefinition---->>DefaultListableBeanFactory.registerBeanDefinition

SpringBoot源码分析:SpringBoot启动源码(一)

SpringBoot源码分析:SpringBoot启动源码(一)

SpringBoot源码分析:SpringBoot启动源码(一)

SpringBoot源码分析:SpringBoot启动源码(一)

SpringBoot源码分析:SpringBoot启动源码(一)

SpringBoot源码分析:SpringBoot启动源码(一)

(五)、刷新容器

刷新容器完全是Spring的功能了,比如初始化资源,初始化上下文广播器等,这个就不再详细介绍,有兴趣可以看看Spring的源码。

(六)、 IOC容器的后置处理

一个扩展方法,源码如下,默认为空,如果有自定义需求可以重写,比如打印一些启动结束日志等。

SpringBoot源码分析:SpringBoot启动源码(一)

(七)发出结束执行的事件

同样是EventPublishingRunListener这个监听器,广播ApplicationStartedEvent事件。

SpringBoot源码分析:SpringBoot启动源码(一)

(八)执行Runners

Spring Boot 提供了两种Runner让我们定制一些额外的操作,分别是CommandLineRunnerApplicationRunner,调用的源码如下:

SpringBoot源码分析:SpringBoot启动源码(一)

 Spring Boot 启动流程相对简单些,作者将其细分了以上八个步骤,希望能够帮助读者理解,流程图如下:

SpringBoot源码分析:SpringBoot启动源码(一)

参考文章:

springboot启动流程源码解析(带流程图)_springboot框架流程图_wuweixianzheng的博客-CSDN博客

Spring Boot 启动流程源码如何分析? - 知乎

 GitHub - chenjiabing666/JavaFamily: 【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。文章来源地址https://www.toymoban.com/news/detail-472113.html

到了这里,关于SpringBoot源码分析:SpringBoot启动源码(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • SpringBoot配置外部Tomcat项目启动流程源码分析

    SpringBoot配置外部Tomcat项目启动流程源码分析

    SpringBoot应用默认以Jar包方式并且使用内置Servlet容器(默认Tomcat),该种方式虽然简单但是默认不支持JSP并且优化容器比较复杂。故而我们可以使用习惯的外置Tomcat方式并将项目打War包。 ① 同样使用Spring Initializer方式创建项目 ② 打包方式选择\\\"war\\\" ③ 选择添加的模块 ④ 创建的

    2024年02月04日
    浏览(13)
  • SpringBoot源码分析之Tomcat是如何在SpringBoot中启动的?

    SpringBoot源码分析之Tomcat是如何在SpringBoot中启动的?

    一.前言 我们知道SpringBoot可以直接把传统的war包打成可执行的jar包,直接启动。这得益于SpringBoot内置了容器可以直接启动。本文将以 Tomcat 为例,来看看 SpringBoot 是如何启动 Tomcat 的。 一.SpringApplication初始化 调用到最终的run方法我们来看一下 这里面首先创建了一个SpringAppl

    2024年02月05日
    浏览(8)
  • SpringBoot-Run启动流程(源码分析)—看不懂来揍我

    SpringBoot-Run启动流程(源码分析)—看不懂来揍我

    目录 前言 Run()方法 1、实例化SpringApplication对象 1、加载容器 2、装配初始化器 3、装配监听器  4、加载主类 2、执行Run()方法 1、设置headless 2、启用SpringApplicationListener 3、加载Banner 1、图片Banner 2、文本Banner 4、异常报告类加载 5、准备上下文         6、刷新上下文 7、系统

    2024年02月14日
    浏览(8)
  • spring-transaction源码分析(1)概述和事务传播级别

    spring-tx包使用注解驱动和AOP通知将事务开启、提交/回滚、以及复杂的传播机制封装了起来,开发者不再需要编写事务管理的代码,而是可以只关注自己的业务逻辑。 本文将简单介绍spring-tx使用步骤以及七种事务传播级别。 后续文章会阅读源码,深入分析spring-tx aop通知、七种

    2024年02月03日
    浏览(26)
  • 【SpringBoot3.0源码】启动流程源码解析 • 上

    SpringBoot启动类:

    2024年02月02日
    浏览(10)
  • flink源码分析 - flink命令启动分析

    flink版本: flink-1.12.1 源码位置:  flink-dist/src/main/flink-bin/bin/flink flink命令源码: 首先讲第一段: 工作中,很多人喜欢用符号链接(软连接)去将原始命令链接到一个新的文件。 例如:  将 /home/aaa链接到/opt/soft/flink-1.12.1/bin/flink,  实际使用的时候就可以用 aaa去代替flink命令。 例如

    2024年01月18日
    浏览(8)
  • springboot启动过程原理分析

    springboot启动过程原理分析

    现在绝大多数java项目都上了Springboot框架, 因此深入理解Springboot框架的运行原理,能帮助我们更好的在Springboot框架下进行业务开发,同时能学习框架中优秀的设计思想, 本文主要是通过对Springboot源码的分析, 来理解整个springboot项目的启动流程. 因为Springboot不同版本的源码有差异

    2024年02月07日
    浏览(6)
  • ZLMediaKit源码分析(一)服务启动

    ZLMediaKit源码分析(一)服务启动

    ZLMediaKit源码分析(一)服务启动 ZLMediaKit源码分析(二)推流创建 ZLMediaKit源码分析(三)拉流创建 ZLMediaKit源码分析(四)重封装 ZLMediaKit源码分析(五)代理服务 ZLMediaKit源码分析(六)http 点播 创建TcpServer实例,其父类Server同时被实例化。 EventPollerPool初始化线程池。批量

    2024年02月11日
    浏览(5)
  • Spring Boot启动源码分析

    Spring Boot启动源码分析

    版本:spring-boot-starter-parent版本为2.3.0 Spring Boot项目的启动入口是一个main方法,因此我们从该方法入手即可 跟踪run方法 这里分两步debug: new SpringApplication( primarySources ) 执行run()方法 deduceFromClasspath推断应用程序类型 该方法根据是否存在指定路径的类来推断应用程序类型。有

    2024年02月07日
    浏览(9)
  • springboot启动流程源码解析(带流程图)

    springboot启动流程源码解析(带流程图)

    本文自己写的(头条也有这篇文章),若有问题,请指正。 大致流程如下: 1. 初始化SpringApplication,从META-INF下的spring.factories读取 ApplicationListener/ApplicationContextInitializer 2.运行SpringApplication的run方法 3.读取项目中环境变量、jvm配置信息、配置文件信息等 4.创建Spring容器对象(

    2024年02月08日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包