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 依賴,來簡化項目搭建以及開發過程。

結語

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM