从SpringBoot启动,阅读源码设计( 二 )


从SpringBoot启动,阅读源码设计

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

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

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

文章插图
WebServer:Web应用服务器接口,比如常用的Tomcat,Jetty,Netty等,根据应用类型选择,只提供了启动、停止、获取端口三个方法 , 通过WebServerApplicationContext与应用上下文相关联;
TomcatWebServer:SpringBoot框架管理内置Tomcat服务的核心类,对Tomcat生命周期的管理提供了一层包装;
Tomcat:Apache组件中轻量级Tomcat启动器,提供了Tomcat基础配置,比如默认的Port和HostName , 以及生命周期管理的方法,TomcatWebServer类中调用的就是该API中的具体方法;
八、事件模型事件驱动模型是复杂流程中的常用解耦手段,即通过事件发送和监听两个拆解动作 , 实现流程的分步执行,这在SpringBoot启动流程和上下文装载中更是发挥的淋漓尽致;
从SpringBoot启动,阅读源码设计

文章插图
ApplicationEvent:应用事件基础抽象类,继承自JDK中EventObject类,具体事件会继承该类,内部声明了事件源和发生时间两个核心属性;
ApplicationEventMulticaster:应用事件广播的顶级接口 , 可以将指定的应用事件广播给适合的监听器;
SimpleApplicationEventMulticaster:应用事件广播接口的简单实现,可以断点该类的multicastEvent方法,查看广播时应用事件和其相应的监听器;
ApplicationListener:应用事件监听器接口 , 继承自JDK中EventListener接口,Spring中扩展了多种具体的事件监听器,以实现各种不同的场景需求,比如最常见的ConfigFileApplicationListener配置文件监听器;
九、配置加载SpringBoot工程中,配置文件的管理策略非常复杂 , 有内部程序执行加载配置,也有外部集成的组件配置,当然最核心的就是工程的自定义配置;
从SpringBoot启动,阅读源码设计

文章插图
ConfigFileApplicationListener.Loader:配置文件监听器的内部类 , 实现对工程中的配置源加载,其核心逻辑在Loader.load方法中实现,具体逻辑由相关的实现类完成;
PropertySourceLoader:配置加载的策略接口 , 在Spring工程中支持多种类型的文件配置,比如yml、yaml、properties、xml,需要通过文件的扩展名选择相应的加载实现类;
YamlPropertySourceLoader:加载.yml或者

推荐阅读