首页 > 其他分享 >springboot自学(6)springboot核心原理

springboot自学(6)springboot核心原理

时间:2024-08-05 15:41:40浏览次数:13  
标签:初始化 springboot 容器 对象 监听器 原理 自学 方法 加载

Springboot启动流程

  1. 初始化各种属性,加载成对象

  读取环境属性(Environment)

  系统配置(spring.factories)

  参数(Arguments、application.properties)

  1. 创建Spring容器对象ApplicationContext,加载各种配置
  2. 在容器创建前,通过监听器机制,应对不同阶段加载数据、更新数据的要求
  3. 容器初始化过程中追加各种功能,例如统计时间、输出日志等

第一步启动来,run方法

进入run方法

primarySource属性指的就是启动类Springboot30StartupApplication,接下来再进入run方法

这是new了一个对象,加载各种配置信息,初始化各种配置对象,然后调用了run这个方法初始化容器,接下来进入SpringApplication这个方法

这个方法里调用了自己的构造方法,传了一个resourceLoader(资源加载器),点击this进入构造方法 

第一行是把传进来的resourceLoader初始化成了成员变量(资源加载器),方便后续本方法和其他的方法使用;

第二行断言,判断一下primarySource是不是null;

第三行是把可变参数primarySource去重转换成了集合类型的对象保存到成员变量中

第四行的方法进去看看

这个方法是判断并返回web应用的容器类型

第五行的方法是从SpringFactories的配置中获得springboot系统引导注册初始化的信息,

进入方法

第1行先创建了一个BootstrapRegistryInitializer的集合;

第2行通过getSpringFactoriesInstances的方法针对Bootstrapper.class获得了SpringFactoriesInstances的信息,里面进行了一系列的设定然后放入集合

第3行又通过getSpringFactoriesInstances的方法针对BootstrapRegistryInitializer.class获得的信息也加入了集合,进入这个方法

还有有一个方法,再进入

第1行拿到类加载器

第2行,初始化了一个集合,把要加载的所有东西提取出来,得到要加载所有东西的名称

第3行,根据这个名称,创建对应的实例,得到了所有的实例对象

第4行,对实例对象进行了排序

第5行,返回实例

第六行 设置初始化信息,又使用到了getSpringFactoriesInstances方法,这回加载的是ApplicationContextInitializer.class的信息

这只是这个spring.factories里的,其他的文件里也可能有

第七行 设置监听器,还是调用了getSpringFactoriesInstances方法,这回加载的是ApplicationListener.class的信息(自定义的监听器可以做很多的事情)

别忘了在spring.factories里配置上

第八行 初始化了引导类的类名信息(备用的)

 

接下来看run方法,初始化容器,得到一个ApplicationContext对象

 

第一行创建秒表(StopWatch),是的,就是一个计时器

第二行启动了计时器开始计时了,后面在第十八行停止的

这个就是计时器的反馈时间,看代码可知,springboot没有把之前读取文件的时间算在内。

第三行创建的是系统引导信息对应的上下文对象

第四行声明了一个对象

第五行进入这个方法

这个方法里系统级的设置了一个属性,模拟输入输出信号,避免出现因缺少外设导致的信号传输失败,进而引发错误(模拟显示器,键盘,鼠标...)

第1行是设置"java.awt.headless"这个值

第2行是设置方法里面的参数,前面的是取了"java.awt.headless"这个值,后面是如果没取到就用this.headless的值,如果去取到了,就用取到的值

其实就是配置了java.awt.headless = true

第六行获取当前注册的所有监听器

第七行监听器执行了对应的操作步骤

第九行拿参数

第十行将前期读取的数据加载成了一个环境对象,用来描述信息

第十一行做了一个配置,备用

第十二行初始化启动图标

第十三行创建容器对象,根据前期配置的容器类型进行判定并创建

第十四行设置应用启动的启动模式

第十五行对容器进行设置,参数来源于前期的设定

第十六行刷新容器环境

第十七行刷新完毕后做的后处理

第十八行计时器关闭

第十九行是判断这个logStartupInfo是否为true(默认是true)

第二十行是通过判断以后,创建一个启动信息的日志对象,记录了mainApplicationClass的启动信息

第二十一行监听器执行了对应的操作步骤

第二十二行调用了运行器

第三十行监听器执行了对应的操作步骤

整个方法所有的核心就是context = this.createApplicationContext();前面是创建容器前的各项参数准备工作,后面是把准备好的参数放到容器里 

 

 

标签:初始化,springboot,容器,对象,监听器,原理,自学,方法,加载
From: https://www.cnblogs.com/bulesea/p/18343319

相关文章

  • mysql分区自动维护(SpringBoot+MybatisPlus)
    1.环境SpringBoot+MybatisPlus+MySQL2.简介通过定时器@Scheduled每日触发,查询当前库中所有分区表(这里以时间段进行分区)判断剩余分区是否小于自定义预留分区(无自定义预留分区则取默认分区配置),若小于预留分区时,自动创建分区至配置分区数判断已有分区是否大于自定义保留分......
  • springboot多数据源整合及使用(一个oracle,两个mysql)
    在开发工作中,会遇到需要使用多个数据源的情况,比如项目一开始只有oracle,后面需要追加两个mysql数据源使用,这时候就需要配置多数据源了.首先,配置文件的编写:版本如下spring:datasource:db1:driver-class-name:com.mysql.cj.jdbc.Driverurl:......
  • 补充:关于GRU的详细运作原理以及特殊的优化思路
    1.GRU的基本结构和运作原理1.1GRU的基本概念GatedRecurrentUnit(GRU)是一种简化版的循环神经网络(RNN),它通过引入门控机制来解决长期依赖问题,同时减少参数数量以降低计算复杂度。1.2GRU的结构详解GRU包含两个门控机制:更新门(updategate)和重置门(resetgat......
  • 免费【2024】springboot 大学校园旧物捐赠网站的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】springboot 大学生家教管理系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • springboot+vue酒店信息管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展和消费者需求的日益多元化,酒店行业正面临着前所未有的挑战与机遇。传统的酒店管理模式已难以满足现代酒店高效运营、精准服务及客户体验优化的需求。在此背景下,酒店信息管理系统(HotelInformationManagementSys......
  • springboot+vue酒店信息管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,酒店业作为旅游产业链中的重要一环,面临着日益增长的客户需求与激烈的市场竞争。传统的手工管理模式已难以满足现代酒店对高效、精准、个性化服务的需求。在此背景下,开发一套集用户管理、房间类别划分、客房信息展......
  • springboot+vue酒店客房预订系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,酒店行业作为旅游业的重要支柱,面临着日益增长的客户需求和激烈的市场竞争。传统的酒店预订方式,如电话预订或到店预订,已难以满足现代消费者对于便捷性、实时性和个性化服务的高要求。在此背景下,开发一套高效、智能......
  • springboot+vue酒店客房管理系统的设计与实现【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,酒店业作为其核心组成部分,面临着日益增长的客户需求与管理复杂性的双重挑战。传统的手工酒店客房管理方式已难以满足现代酒店高效、精准、便捷的管理需求。宾客对住宿体验的要求不断提高,期望通过数字化手段实现快......
  • 软件工程专业导论大作业-关于华为自主研发的新编程语言基本原理其应用场景分析
    摘 要在2024年6月21日的华为开发者大会上,华为宣布了其自主研发的全新编程语言——“仓颉”。这一语言的推出旨在为其“升腾”AI芯片和云原生应用开发提供强大支持,并且有助于构建全球技术生态系统。“仓颉”编程语言特别设计以应对华为“升腾”AI芯片的需求,并且专注于硬件和......