1. 程式人生 > >SpringBoot 總結篇

SpringBoot 總結篇

        時至今日,SpringBoot 系列文章也算是告一段落,回想起當初立flag的情景,彷彿還歷歷在目。用一個月時間學完 SpringBoot 並整理成文章?又定一些異想天開計劃,當時這樣想著。不過,雖然過程比較艱辛,但結局也還算完美,在最後一篇文章完成那一刻,心情卻很平靜,我想,大概是習以為常了吧。

        在系列結尾,再對 SpringBoot 做一個總結,也算是塵埃落定了。

正文

        SpringBoot 最顯著的功能就是快速啟動一個 Spring 應用,為 Spring 所有特性提供了更廣泛的支援;提供一系列大型專案通用的非功能性功能(例如嵌入式伺服器,安全性,指標,執行狀況檢查和外部化配置);完全沒有程式碼生成,也不需要XML配置也是一大亮點。

該系列文章雖然以討論 SpringBoot 為中心,但也涉及到了 Spring 技術棧,因為 SpringBoot 底層核心是就是 Spring ,如果對 Spring 瞭如指掌,那學習 SpringBoot 就輕而易舉了。

1、自動裝配基礎

詳見《SpringBoot(一)自動裝配基礎》

SpringBoot 中運用了大量的 Spring 註解,其註解大致分為這幾類:

  1. 配置註解:@Configuration、@ComponentScan、@Import、@Conditional、Bean
  2. 模式註解:@Componnt、@Repository、@Service、@Controller
  3. @Enable 模組註解:@EnableWebMvc、@EnableTransactionManagement、@EnableWebFlux

配置註解都在 Spring 的 ConfigurationClassParser#doProcessConfigurationClass 方法中進行處理,後續會在 Spring 系列文章中詳細介紹;模式註解都標註了 @Component 註解,屬於 @Component 的派生註解,@ComponentScan 會掃描標註 @Component 及其派生註解的類,並將這些類加入到 Spring 容器中;@Enable 模組註解中通過 @Import 匯入配置類,在這些配置類中載入 @Enable 模組需要的元件。

2、自動裝配正文

詳見《SpringBoot(二)自動裝配正文》

SpringBoot

時代,通過一個main方法就可以啟動一個應用,其底層依賴的就是 Spring 幾個註解。從 @SpringBootApplication 註解中的 @EnableAutoConfiguration 註解開始,@EnableAutoConfiguration 屬於 Spring@Enable 模組註解,在該註解中通過 @Import 匯入 AutoConfigurationImportSelector 類,在該類中載入所有以 AutoConfiguration 為字尾且標註 @Configuration 註解的自動配置類,每個自動配置類可以裝配一個外部模組,如 Web MVC 模組對應的配置類是 WebMvcAutoConfiguration 。在自動配置類中又有眾多 @Conditional 條件註解,可達到靈活裝配的目的。

3、SpringApplication啟動類準備階段

詳見《SpringBoot(三)SpringApplication啟動類準備階段》

在構造 SpringApplication 啟動類時,初始化了幾個重要的類,如 WebApplicationTypeApplicationContextInitializerApplicationListener。其中 WebApplicationType 儲存的是當前應用型別,如 Servlet Web 、Reactive Web; ApplicationContextInitializerApplicationListener 則是 SpringBoot 通過擴充套件 Spring 特性建立的初始化器及監聽器。

4、SpringApplication啟動類執行階段

詳見《SpringBoot(四)SpringApplication啟動類執行階段》

SpringApplication 執行階段中,先是通過擴充套件 Spring 監聽機制,在 SpringBoot 各個階段釋出不同事件,執行多個事件監聽器;然後建立 Environment 類,這是外部化配置的核心類;最後啟動 Spring 容器,通過 WebApplicationType 判定當前應用型別,建立應用對應 ApplicationContext 應用上下文,再呼叫 ApplicationContext#refresh 方法啟動容器。

5、外部化配置之Environment

詳見《SpringBoot(五)外部化配置之Environment》

這篇文章介紹了外部化配置的幾種資源型別,如 properties、YAML、環境變數、系統屬性、啟動引數等。還詳細介紹了 Environment 類,該類是外部化配置核心類,所有外部化配置資料,都儲存在該類中,並和大家討論了整個儲存流程。

6、外部化配置之@ConfigurationProperties

詳見《SpringBoot(六)外部化配置之@ConfigurationProperties》

@ConfigurationPropertiesSpringBoot 實現外部化配置的重要註解,配合 SprinBoot 自動裝配特性來達到快速開發的目的。主要將 properties 配置檔案和 Properties 配置類中的屬性進行對映,同樣也和大家討論了整個對映流程。

7、嵌入式Web容器

詳見《SpringBoot(七)嵌入式Web容器》

這篇文章詳細討論了容器的建立及啟動。傳統 Spring 應用需手動建立和啟動 Web 容器,在 SpringBoot 中,則是嵌入式的方式自動建立和啟動。SpringBoot 支援的 Web 容器型別有 Servlet Web 容器和 Reactive Web 容器,它們都有具體容器實現,Sevlet Web 對應的是 TomcatJettyUndertow,預設實現是 Tomcat;Reactive Web 對應的是 Netty

8、Starter機制之自定義Starter

詳見《SpringBoot(八)Starter機制之自定義Starter》

這篇文章詳細介紹了 SpringBootStarter 機制,並通過自定義 Starter 來深入理解整個執行機制。Starter 也是 SpringBoot 重要特性,通過整合 Starter 依賴,來簡化專案搭建以及開發過程。

結語

總結篇就到這裡結束,最後,江湖路遠,我們,下個系列見