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中就是充分运用了这些扩展,实现的自动化配置。
上面看的过程,由于超出了书本的内容,所以可能会有纰漏,有不同意见可以评论交流,谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?