springboot启动流程概述_简述app启动的主要流程

springboot启动流程概述_简述app启动的主要流程又回顾了springboot启动流量,有了新的理解,进行以下补充:1、listeners.starting()等方法,第一次出现了误解,以为是启动监听器,但是我很奇怪监听器为什么要启动。再次看源码,才知道不同的方法是用来发布不同的事件,此方法就是发布ApplicationStartingEvent事件。可见看源码还是要耐心。…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 再次回顾了springboot启动流程,有了新的理解,进行以下补充:
  1. listeners.starting()等方法,第一次出现了误解,以为是启动监听器,但是我很奇怪监听器为什么要启动。再次看源码,才知道不同的方法是用来发布不同的事件,此方法就是发布ApplicationStartingEvent事件。可见看源码还是要耐心。
  • 启动流程二次总结
  1. 自定义启动类,main方法调用:SpringApplication.run(启动类.class,args);
  2. 调用SpringApplication构造方法实例化SpringApplication,实例化过程中做以下几件事:
    • 根据依赖判断webApplicationType,spring-web就是Servlet类型,spring-webflux就是Reactive类型
    • spring.factories文件读取ApplicationContextInitializer.class的所有配置实例实例化,放到全局变量;
    • spring.factories文件读取ApplicationListener.class的所有配置实例实例化,放到全局变量;
    • 推断主类class类型。
  3. 调用run()方法,所有的初始化工作在run()方法内完成,找重要的步骤说;
  4. 准备异常报告器空列表,用于后续报告异常,不重要;
  5. 设置jvm参数,无头服务(不太懂),不重要;
  6. 构建SpringApplicationRunListeners,spring.factories文件获取EventPublishingRunListener,通过此类对象调用2中的所有监听器,发布不同的事件,这一步首先发布ApplicationStartingEvent事件;
  7. 解析启动参数args,构建环境变量ConfigurableEnvironment,发布ApplicationEnvironmentPreparedEvent事件;
  8. 准备并打印Banner,printBanner(environment);
  9. 创建上下文,Servlet:AnnotationConfigServletWebServerApplicationContext,Reactive:AnnotationConfigReactiveWebServerApplicationContext
  10. 加载异常报告器;
  11. 准备上下文,其中做以下几件事:
    • 设置环境变量;
    • 初始化,调用2中的所有初始化器,发布ApplicationContextInitializedEvent事件;
    • 加载上下文,构建各种BeanDefinition,为后续Bean的加载、扫描做准备,同时发布ApplicationPreparedEvent事件;
  12. 刷新上下文,这是spring bean管理的核心步骤,其中解决循环依赖、启动Tomcat等服务器都是在此步骤实现,目前简要说明,会在Bean生命周期文章重点说明Bean的实例化过程。主要的工作如下:
    • 对相关属性、环境变量进行校验;
    • 准备BeanFactory,填充一些属性,注册相关单例对象(没有深入研究);
    • 没有找到是在哪一步进行注解、配置扫描这些
    • onRefresh()方法会启动webServer,如Tomcat;
    • finishBeanFactoryInitialization()创建单例,Bean的实例化、解决循环依赖均发生在此方法;
    • 完成刷新上下文,发布ContextRefreshedEvent事件;
  13. 发布ApplicationStartedEvent事件;
  14. 回调ApplicationRunner、CommandLineRunner等runner;
  15. 发布ApplicationReadyEvent事件;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171534.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java学习之常用类篇

    Java学习之常用类篇0x00前言在开发中难免调用到各种api来开发程序,那就先来学习一下api的一些相关概念。0x01api的使用首先还是得来看看api的一个解释。API(Applic

    2021年12月11日
    56
  • dota2比分网_浅谈极电竞比分网,脱兔电竞,1zplay和奇兵电竞有什么不同

    在电子竞技飞速发展的背景下,电竞直播行业成为连接电竞比赛和电竞观众们的重要桥梁。以往电竞直播还不像现在发达,观众们常常需要到现场观看比赛,才能感受到热烈的电竞氛围。现在有了电竞线上直播,观众们通过弹幕互动,在家也一样可以跟网友们一起讨论比赛。随着观众们观看比赛的要求越来越高,他们往往不仅满足于观看选手们的精彩操作,更多是希望通过更详细的电竞数据来读懂比赛,由此,电竞比分网成为了电竞爱好者们的新选择…

    2022年4月1日
    63
  • 异步调用的理解

    异步调用的理解1.分清异步/同步,阻塞/非阻塞。首先讲下个人对异步和同步,阻塞和非阻塞的概念的理解。关于这个概念看了许多解释,都是似是而非,并不能完全get到点。个人认为从进程间通信的角度理解比较好,在《操作系统》中关于的部分是这样解释的:进程间的通信时通过send()和receive()两种基本操作完成的。具体如何实现这两种基础操作,存在着不同的设计。 消息的传递有可能是阻塞的或非阻塞的…

    2022年7月27日
    3
  • 5分钟搞定!java免费源码网站

    5分钟搞定!java免费源码网站一、前言最近刚读完一本书:《Netty、Zookeeper、Redis并发实战》,个人觉得Netty部分是写得很不错的,读完之后又对Netty进行了一波很好的复习(之前用springboot+netty+zookeeper模仿dubbo做rpc框架,那时候是刚学netty后自己造的小轮子)。虽然对于Netty的使用已经比较熟悉了,而且还知道它的底层是基于JavaNIO做进一步的封装,使得并发性能和开发效率得到大大的提升。但是,对于同步阻塞、同步非阻塞、异步这

    2022年7月8日
    28
  • android共享文件夹_安卓多用户共享文件

    android共享文件夹_安卓多用户共享文件AndroidN之前的Uri常规Uri有两种:媒体文件的Uri是content://,表示这是一个数据库数据。去数据库查询正常返回。其他的文件Uri是file://,表示这个是一个文件。这个uri是通过Uri.fromFile(Filefile)方法生成。AndroidN之前,这些uri可以传递到其他应用。AndroidN中共享文件Android

    2022年9月6日
    3
  • Java 使用 Tess4J 实现图像识别

    Java 使用 Tess4J 实现图像识别最近需要用Java做一个图像识别的东西,查了一些资料,在此写一个基于Tess4J的教程,方便其他人参考和使用。其实做图像识别,也可以使用TESSERACT-OCR来实现,但是该方式需要下载软件,在电脑上安装环境,移植性不高,使用Tess4J只需要下载相关Jar包,导入项目,再把项目封装好就可以处处运行了。首先,下载Tess4J的相关资源(一个压缩包),官网:http://tess4j.source…

    2022年6月13日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号