從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或者

推薦閱讀