SpringBoot 總結篇
時至今日,SpringBoot 系列文章也算是告一段落,回想起當初立flag的情景,彷彿還歷歷在目。用一個月時間學完 SpringBoot 並整理成文章?又定一些異想天開計劃,當時這樣想著。不過,雖然過程比較艱辛,但結局也還算完美,在最後一篇文章完成那一刻,心情卻很平靜,我想,大概是習以為常了吧。
在系列結尾,再對 SpringBoot 做一個總結,也算是塵埃落定了。
正文
SpringBoot 最顯著的功能就是快速啟動一個 Spring 應用,為 Spring 所有特性提供了更廣泛的支援;提供一系列大型專案通用的非功能性功能(例如嵌入式伺服器,安全性,指標,執行狀況檢查和外部化配置);完全沒有程式碼生成,也不需要XML配置也是一大亮點。
該系列文章雖然以討論 SpringBoot 為中心,但也涉及到了 Spring 技術棧,因為 SpringBoot 底層核心是就是 Spring ,如果對 Spring 瞭如指掌,那學習 SpringBoot 就輕而易舉了。
1、自動裝配基礎
詳見《SpringBoot(一)自動裝配基礎》
SpringBoot 中運用了大量的 Spring 註解,其註解大致分為這幾類:
- 配置註解:@Configuration、@ComponentScan、@Import、@Conditional、Bean
- 模式註解:@Componnt、@Repository、@Service、@Controller
- @Enable 模組註解:@EnableWebMvc、@EnableTransactionManagement、@EnableWebFlux
配置註解都在 Spring 的 ConfigurationClassParser#doProcessConfigurationClass 方法中進行處理,後續會在 Spring 系列文章中詳細介紹;模式註解都標註了 @Component 註解,屬於 @Component 的派生註解,@ComponentScan 會掃描標註 @Component
及其派生註解的類,並將這些類加入到 Spring 容器中;@Enable
模組註解中通過 @Import
匯入配置類,在這些配置類中載入 @Enable
模組需要的元件。
2、自動裝配正文
詳見《SpringBoot(二)自動裝配正文》
在 SpringBoot
Spring
幾個註解。從 @SpringBootApplication
註解中的 @EnableAutoConfiguration
註解開始,@EnableAutoConfiguration
屬於 Spring
的 @Enable
模組註解,在該註解中通過 @Import
匯入 AutoConfigurationImportSelector
類,在該類中載入所有以 AutoConfiguration
為字尾且標註 @Configuration
註解的自動配置類,每個自動配置類可以裝配一個外部模組,如 Web MVC 模組對應的配置類是 WebMvcAutoConfiguration
。在自動配置類中又有眾多 @Conditional
條件註解,可達到靈活裝配的目的。
3、SpringApplication啟動類準備階段
詳見《SpringBoot(三)SpringApplication啟動類準備階段》
在構造 SpringApplication
啟動類時,初始化了幾個重要的類,如 WebApplicationType
、ApplicationContextInitializer
、ApplicationListener
。其中 WebApplicationType
儲存的是當前應用型別,如 Servlet Web 、Reactive Web; ApplicationContextInitializer
和 ApplicationListener
則是 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》
@ConfigurationProperties
是 SpringBoot
實現外部化配置的重要註解,配合 SprinBoot
自動裝配特性來達到快速開發的目的。主要將 properties 配置檔案和 Properties 配置類中的屬性進行對映,同樣也和大家討論了整個對映流程。
7、嵌入式Web容器
詳見《SpringBoot(七)嵌入式Web容器》
這篇文章詳細討論了容器的建立及啟動。傳統 Spring
應用需手動建立和啟動 Web 容器,在 SpringBoot
中,則是嵌入式的方式自動建立和啟動。SpringBoot
支援的 Web 容器型別有 Servlet Web 容器和 Reactive Web 容器,它們都有具體容器實現,Sevlet Web 對應的是 Tomcat
、Jetty
、Undertow
,預設實現是 Tomcat
;Reactive Web 對應的是 Netty
。
8、Starter機制之自定義Starter
詳見《SpringBoot(八)Starter機制之自定義Starter》
這篇文章詳細介紹了 SpringBoot
的 Starter
機制,並通過自定義 Starter
來深入理解整個執行機制。Starter
也是 SpringBoot
重要特性,通過整合 Starter
依賴,來簡化專案搭建以及開發過程。
結語
總結篇就到這裡結束,最後,江湖路遠,我們,下個系列見