AbstractApplicationContext:上下文接口抽象实现,核心的API,对应用上下文中的公共能力做了实现;
ConfigurableWebApplicationContext:Web应用上下文配置扩展接口,提供了Web应用的上下文配置能力;
WebServerApplicationContext:Web服务上下文,创建并管理Web应用的服务器,在该流程中嵌入的是Tomcat服务;
根据应用上下文几个核心的API设计,体会Spring源码的设计思路,从顶级的接口开始,不断向下扩展并且新增方法,理解抽象实现类的逻辑,以及服务运行时所依赖的具体API;
四、资源加载什么是资源,可以是各种类型的文件和配置,字节输入流的转换,也可以是URL资源定位,Spring框架在运行的过程中,需要依赖Resource接口实现对底层资源的访问;

文章插图
Resource:资源描述的顶级接口,提供了一系列的方法,继承InputStreamSource接口,支持将资源转换为流的形式操作;
AbstractResource:资源访问的抽象实现类,这里的设计原理与AbstractApplicationContext类似,提供资源访问方法的基础实现;
ResourceLoader:资源加载的封装接口,应用下文需要依赖该接口实现资源的获取与访问;
针对不同应用场景需求,Resource接口的实现类有如下几个:FileSystemResource文件系统资源,ClassPathResource类路径下资源,InputStreamResource输入流资源等;
五、应用环境对于Property和Environment源码设计体系,参考上述的源码模块,在思路上是相似的,此处不多描述;

文章插图
应用程序的属性和环境涉及到的参数描述非常多,比较直接的手段是通过System类中的方法输出,至于信息如何加载,在StandardEnvironment类中提供了方法,可以断点查看;
六、Bean对象基于Spring框架的应用程序中,由Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为Bean对象;Bean的生命周期非常复杂,过程大致如下:实例化,属性加载,初始化前后管理,销毁;

文章插图
BeanFactory:工厂类,Spring框架的核心能力,Bean容器的顶级接口,提供了一系列Bean对象的访问方法,是IOC思想和依赖注入的基础支撑;
ConfigurableBeanFactory:Bean容器可配置化接口,该扩展接口只是为了允许框架内部的即插即用和访问bean工厂的配置方法;
AbstractBeanFactory:Bean管理的抽象实现类,可以查看其内部doGetBean方法,提供Bean实例对象的获取逻辑,如果无法获取则执行创建逻辑;
七、Tomcat服务初次启动SpringBoot工程时,最大的疑问就是可见Tomcat启动日志,但是没有显式的做服务器装配,直接启动JAR包即可,这在流程上简化了一大步;

文章插图
WebServer:Web应用服务器接口,比如常用的Tomcat,Jetty,Netty等,根据应用类型选择,只提供了启动、停止、获取端口三个方法,通过WebServerApplicationContext与应用上下文相关联;
TomcatWebServer:SpringBoot框架管理内置Tomcat服务的核心类,对Tomcat生命周期的管理提供了一层包装;
Tomcat:Apache组件中轻量级Tomcat启动器,提供了Tomcat基础配置,比如默认的Port和HostName,以及生命周期管理的方法,TomcatWebServer类中调用的就是该API中的具体方法;
八、事件模型事件驱动模型是复杂流程中的常用解耦手段,即通过事件发送和监听两个拆解动作,实现流程的分步执行,这在SpringBoot启动流程和上下文装载中更是发挥的淋漓尽致;
经验总结扩展阅读
- 学车时如何正确启动发动机?
- 实用帖:从成都到稻城亚丁,最全自驾游攻略
- 汤的种类
- 鱼肉鱼汤怎么做
- 谁知道魅族4怎么清理后台运行
- 打伞紫外线也会从地面反射吗
- 集合符号表示的意义
- 牛战士从不摘下他的面具是什么意思?
- 在PE文件中简单注入代码,实现在启动前弹窗
- 两个人在一起说说