Spring 全家桶之 Spring Boot 2.6.4(九)- 启动流程解析(二)

简介: Spring 全家桶之 Spring Boot 2.6.4(九)- 启动流程解析

执行run()方法

在SpringApplication对象创建完成之后,开始执行run()方法;重新启动Debug,进入run方法

0000ffeb26764578aaac560f1f4e936e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

此时SpringApplication对象已经创建好,run方法中的流程就是Spring Boot启动的流程。

Step Over第一句289行代码只是为了标记一个起始时间

dcbed736a87541bea9c6946f0e1c55fd_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这里是将创建SpringApplication对象时从配置文件中获取所有的BootstrapRegistryInitializer配置类,这里将列表遍历,但是列表为空,返回一个默认的DefaultBootstrapContext

第291行声明了一个容器,接下来所有的代码就是往这个容器中注册组件,最终返回这个容器

context容器中注入了哪些组件? 292行配置headless属性为True,与awt应用相关

SpringApplicationRunListeners listeners = getRunListeners(args);
复制代码

Step Into 进入到 getRunListeners方法

926abfaf343d462ca262f36c4b2e6996_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这里又调用了getSpringFactoriesInstances方法,这个方法的作用就是从类路径下的spring.factoies中获取指定的类,这里要获取的是所有的SpringApplicationRunListener类

cd7d9cae50da439bb4ea3d181ae6a78d_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这里获取了一个EventPublishRunListener

继续Step Over到294行

listeners.starting(bootstrapContext, this.mainApplicationClass);
复制代码

这里调用了starting方法,参数为默认的boostrapContext和SpringAppication中的主程序既AppApplication,进入starting方法

cd7d9cae50da439bb4ea3d181ae6a78d_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这里是循环启动这些监听器

在296行上打断点,重启启动debug模式;Step Over进入到prepareEnvironment方法中,也就是准备环境

dad48469b96142ca97775fc98543c5cc_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

该方法中先是创建了一个environment,创建环境之后回调listeners,表示环境准备完成

第299行是打印banner也就是启动应用时控制台出现的Spring图标,这个图标是可以自定义的

589d5647f40b4655b301cf168ef217e9_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

Step Into 进入 300行的createApplicationContext方法

7668007ad2094ff68006030a1f974f5c_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

再次step into进入到create方法

a7495bc9713b4649a957d9f045cbe2e9_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这里根据WebApplication是Servlet类型返回了AnnotationConfigServletWebServerApplicationContext容器

第301行给容器设置启动属性,设置了一个DefaultApplicationStartup

8c59d6617971492baad4af2442a797c6_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

下一行第302行的作用是准备上下文环境,进入到该方法中;这个方法中对容器做了写配置

ed0a5837a33f40868890ae8e5b57b25a_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

set环境,注册一些后置处理器,进入applyInitializers方法中

297bdd812efd4759922f0b2a328e1d8a_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这个方法就是遍历SpringApplication中initializers中所有的initializer,然后调用initialize方法;遍历完成之后来到第382行

09cf8681a90c47b9a48f7b5bdbdfa286_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

进入到contextPrepared方法中

d9ffa2ca1c5a45f4a8d99e6e8e090f12_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这里就是回调所有的listener的contextPrepared方法

回到prepareContext方法,step over到第389行

dfa33c64dd63402181c5b9a59f299adf_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这里就是注册命令行参数,并且将banner也注册进来;Step Over到第398行

9aa1f0d7acff4b6d8164d82fce8ab3b6_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这里做了判断,然后对容器进行了set操作;来到第406行

3258ea181b3f4a61ab6560b70bd962bd_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这里获取主程序类,然后判断是否为空


相关文章
|
2月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
2月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
2月前
|
XML JSON Java
【SpringBoot(三)】从请求到响应再到视图解析与模板引擎,本文带你领悟SpringBoot请求接收全流程!
Springboot专栏第三章,从请求的接收到视图解析,再到thymeleaf模板引擎的使用! 本文带你领悟SpringBoot请求接收到渲染的使用全流程!
201 3
|
2月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
371 2
|
3月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
2021 1
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
3月前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
813 1
存储 JSON Java
498 0
|
3月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
|
3月前
|
存储 域名解析 弹性计算
阿里云上云流程参考:云服务器+域名+备案+域名解析绑定,全流程图文详解
对于初次通过阿里云完成上云的企业和个人用户来说,很多用户不仅是需要选购云服务器,同时还需要注册域名以及完成备案和域名的解析相关流程,从而实现网站的上线。本文将以上云操作流程为核心,结合阿里云的活动政策与用户系统梳理云服务器选购、域名注册、备案申请及域名绑定四大关键环节,以供用户完成线上业务部署做出参考。

推荐镜像

更多
  • DNS