Spring 源码深度解析(第 2 版)读书笔记(七)SpringBoot启动过程

首先说启动过程,下一篇说自动配置的过程

创建了SpringApplication之后,调用它的run方法,启动

创建父容器

准备容器,设置了小部分信息

然后开始刷新容器

摆了一道

回到熟悉的那个方法,不过其中有些改变,只看改变的那些方法,而且到现在,web容器和子容器都还没启动

第一个:

第二个:

第三个:也是重头戏

创建Tomcat的工厂,然后通过工厂启动web服务,需要需要注意的是 getSelfInitializer,是父容器的一个钩子,在web服务启动之后会跳转回来

红框的上一个方法,将能用的初始化器合在一起,然后通过configureContext,以starter的形式设置到web容器中了,这里没进去看,感兴趣的可自己看

容器搞定之后,开始启动web服务

其实这里跳过了很多很多层,因为它一直在套娃,start然后startInternal,重复了几个轮回,然后到了chirld.start的时候,是通过线程池异步提交任务的形式执行,所以这里的线程不是主线程,然后里面还会套娃,感兴趣可以自己走走看,

然后最后是在这个方法,onStartup,执行了最终逻辑,也就是前面提过的 钩子执行了

虽然是异步,不过现在还是回来 父容器上

主要就是把父容器放到web容器中

 

这个方法其实就是将父容器注册到web容器,然后顺手注册了子容器,不过没有实例化它,实例化是等到有请求来的时候,web容器调用servlet的初始化启动子容器,这个和springMVC的时候有所区别,而且启动的顺序也不一样了,

springMVC的时候,是web容器先启动,然后执行监听器启动父容器,然后通过servlet初始化启动子容器

但在springBoot中是先启动父容器,然后启动web容器,异步注册父容器,子容器是延迟到有请求的时候才创建

到此,SringBoot的启动过程,大致上走了一遍,至于自动化配置,其实也只能看到注解如何扫描我们需要的bean,这个其实上文也有提及,但是对于注解扫描到的信息执行时机以及注解对应的实现,其实都是通过各种postProcessor实现

在容器刷新过程中,有非常多的扩展时机,而在SpringBoot中就是充分运用了这些扩展,实现的自动化配置。

上面看的过程,由于超出了书本的内容,所以可能会有纰漏,有不同意见可以评论交流,谢谢。

posted @   huang1993  阅读(183)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示