springboot启动流程简述_请简要说明单位根的流程

springboot启动流程简述_请简要说明单位根的流程SpringBoot启动流程简要。

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

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

SpringBoot启动流程大概:

  1. 初始化SpringApplication
    1. 根据项目的配置情况和Conditional条件来推断是否是一个Web应用。
    2. 读取所有jar包下面spring.factories文件,解析放入缓存,然后读取ApplicationListener为key的监听器,后续在SpringBoot加载的过程中会基于事件发布来做很多扩展通知。
  2. 真正的run方法开始执行,记录开始执行时间stopwatch。
  3. 读取所有的监听器,放入SpringApplicationRunListeners中,以便支持后续的事件发布订阅。
  4. 发布ApplicationStartingEvent事件,属于是一个Startup开始事件,感兴趣的监听器就会执行具体对应的startup方法。
  5. 基于监听器,加载yml或者properties文件,再根据配置文件中指定的spring.profiles.active环境来激活指定的环境配置,来设置Environment对象
  6. 发布ApplicationEnvironmentPreparedEvent事件,感兴趣的监听器就会触发具体的方法。
  7. 打印SpringBoot的Logo、Banner(不重要)。
  8. 实例化Spring的上下文对象:AnnotationConfigServletWebServerApplicationContext
  9. applicationContext#setEnvironment(),将环境变量配置对象Environment设置到上下文中,然后执行ApplicationContextInitializer初始化上下文对象。
  10. 发布ApplicationContextInitialzedEvent事件,感兴趣的监听器执行对应的容器初始化方法。
  11. 解析启动类为BeanDefinition对象,以便后续IOC流程。
  12. 发布ApplicationPreparedEvent事件,感兴趣的监听器执行对应的方法。
  13. #refresh()方法执行,和Spring的refresh不同的是,这个子类是AnnotationConfigServletWebServerApplicationContext
  14. #refresh()方法中,除了执行IOC的流程外,后面还会执行#onRefresh()方法,这个方法里面就会创建servlet容器,注册DispatcherServlet
  15. 计算启动总耗时,打印。
  16. 发布ApplicationStartedEvent事件,感兴趣的监听器执行对应的started方法。
  17. 发布ApplicationReadyEvent事件,感兴趣的监听器执行对应的就绪方法。
  18. 回调2个内置的扩展自动触发方法:
    1. 回调实现了ApplicationRunner接口的类,且自动执行覆写的run方法。
    2. 回调实现了CommandLineRunner接口的类,且自动执行覆写的run方法。
  19. 如果启动过程中发生了异常,则发布ApplicationFailedEvent,监听器执行具体的异常处理方法。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • kalilinux更换源(pip3换源)

    文件位置:/etc/apt/soucrce.list注释kali原来的源,下面添加任意一个源即可#kali官方源debhttp://http.kali.org/motomainnon-freecontribdeb-srchttp://http.kali.org/motomainnon-freecontribdebhttp://security.kali.org/moto/updatesmaincontribnon-freedeb-srchttp://

    2022年4月10日
    297
  • Arduino 硬件编程语言基础学习入门

    Arduino 硬件编程语言基础学习入门1、Arduino程序必要的setup()和loop()voidsetup(){}voidloop(){}setup()函数中的代码只会被运行一次,通常用来做一些初始化工作;loop()中的代码会被无限次地重复运行,此函数为程序的主体部分。2、程序中的值2.1变量和常量常量是一个字面量,只可以表示一个特定的量。2.2变量类型…

    2022年4月19日
    115
  • Navicat相关注册码[通俗易懂]

    Navicat相关注册码[通俗易懂]Navicat相关注册码用户名和组织随便起。注册码如下 –NavicatforSQLServerV10.0.10NAVD-3CG2-6KRN-IEPMNAVL-NIGY-6MYY-XWQENAVI-C3UU-AAGI-57FW -NavicatPremium注册码NAVJ-E6YF-JULL-KKIGNAVE-BOCL-CE3X-TAGYNAVC-KAIA-NU5I-SPOXNAVL-…

    2025年8月15日
    8
  • micropython教程_md转word

    micropython教程_md转word之前的博客格式不太完美,所以我学习了一下MD编译器相关操作,并把常用的操作总结在这篇博客里面,希望大家可以学习一下,来美观自己的博客

    2022年9月24日
    5
  • 解决”‘pip’ 不是内部或外部命令,也不是可运行的程序或批处理文件”的问题[通俗易懂]

    解决”‘pip’ 不是内部或外部命令,也不是可运行的程序或批处理文件”的问题[通俗易懂]大家好,我是Connor,今天我为大家带来解决CMD命令无法直接运行’点子’进行安装库的问题。今天本来想安装库来着,但是苦于pycharm的设置里不知道出了什么原因,无奈只能使用PIP功能来安装库了,但是输入PIP的时候发现’PIP’不是内部或外部命令,也不是可运行的程序或批处理文件,那这个问题该怎么解决呢?今天就告诉大家解决办法【解决方法】1.找到自己的库的安装路径本…

    2022年5月24日
    46
  • AD原理图设计中如何添加NET CLASS和差分线

    AD原理图设计中如何添加NET CLASS和差分线一,添加NETCLASS由于pcb中可能存在需要设定不同规则的网络组,如果直接在pcb中添加netclass后再进行原理图更新pcb时会自动将netclass删除,所以最好在原理图中设定好。上图是放置NetClass符号的菜单。在原理图中的样子。根据上图所示修改属性和名称。参考使用案例。虚线框中的部分是Blanket,被包围的区域会被设置成同样的属性。更新完之后就可以在pcb这里看到添加的Class了。二,原理图中添加差分线标志作用同样是保证,在更新pcb的时候不会移除。

    2022年7月16日
    18

发表回复

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

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