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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • alibaba.fastjson.JSONObject.parseObject的使用

    alibaba.fastjson.JSONObject.parseObject的使用fastjson是一个性能很好的Java语言实现的JSON解析器和生成器,当你要处理一段接收的json数据,就可以考虑使用JSONObject.parseObjectimportcom.alibaba.fastjson.JSONObject;parseObject(Stringstr)的作用JSON.parseObject(Stringstr)是将str转化为相应的JSONObject对象,其中str是“键值对”形式的json字符串,转化为JSONObject对象之后就可以使用其内置

    2022年7月13日
    10
  • pycharm导入cv2包_pycharm安装cv2失败

    pycharm导入cv2包_pycharm安装cv2失败windows下1.情况一:已在官网下载opencv无需下载,只需要导入环境即可;1.首先,在opencv目录中找到cv2文件夹:opencv3.4.8\opencv\build\python\cv2复制文件夹2.找到Python的根路径,在项目列表可查看(以实际显示的路径为主):在python.exe目录下找到Lib\site-packages,粘贴文件夹2.情况二:下载并…

    2022年8月26日
    3
  • JVM内存逃逸[通俗易懂]

    JVM内存逃逸[通俗易懂]JVM内存逃逸第一次听到JVM内存逃逸的名词时还是很懵逼的,于是赶紧各种查资料,终于搞懂了这个地方。JVM的内存分配主要在是运行时数据区(RuntimeDataAreas),而运行时数据区又分为了:方法区,堆区,PC寄存器,Java虚拟机栈(就是栈区,官方文档还是叫Java虚拟机栈),本地方法区,而内存逃逸主要是对象的动态作用域的改变而引起的,故而内存逃逸的分析就是分析对象的动态作…

    2022年5月30日
    25
  • Android自己主动化測试解决方式

    Android自己主动化測试解决方式

    2021年11月15日
    40
  • 华为C++面试题(产品经理逻辑面试题)

    1.static有什么用途?(请至少说明两种)   1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。   2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。   3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范

    2022年4月11日
    52
  • 【智能家居篇】wifi在智能家居中的应用

    【智能家居篇】wifi在智能家居中的应用

    2022年2月4日
    32

发表回复

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

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