1. SpringBoot是什麼?
SpringBoot是一個Java後端架構,一種全新的程式設計規範,它的産生簡化了架構的使用,所謂簡化是指簡化了Spring衆多架構中所需的大量且繁瑣的配置檔案,是以 SpringBoot是一個服務于架構的架構,服務範圍是簡化配置檔案。
2. 為什麼是SpringBoot?
筆者認為SpringBoot的出現與發展符合時代需求,主要基于以下幾點原因:
其一是為簡化開發:
在目前網際網路後端開發中,JavaEE占據主要地位。對于JavaEE開發,首選Spring架構。在傳統Spring開發中,需要大量XML配置才能運作。直到Spring 4.x的釋出,Spring才能完全脫離XML使用純注解開發。為了進一步簡化開發,2014年SpringBoot 1.0誕生。随着2017年9月Spring 5.x的推出,2018年SpringBoot 2.x推出,至今為2.5.1。
其二是為适應微服務開發:
微服務這一概念是最近幾年才興起的。随着網際網路業務量的指數級擴大,傳統開發無法滿足快速擴容、處理高并發請求等要求。
而微服務為我們解決了快速響應與彈性伸縮的問題。微服務本質上是将一個大的系統拆分為多個子系統,然後通過REST風格的請求将他們內建,進一步簡化分布式系統開發。
3. 約定大于配置
SpringBoot的核心概念是:約定大于配置
能了解這句話就學會一大半了。這裡筆者談談自己的了解:
我們知道SpringBoot是從Spring發展而來的,而開發一個Spring應用需要大量配置,這些配置多種多樣。而SpringBoot要做的事就是針對不同場景提供一個或多個starter(自啟動依賴),我們引入這個starter就能使用SpringBoot預設的約定,加上屬性檔案,做大量自定義配置,簡化開發。
以下涉及源碼分析,需要一定基礎,後續文章會結合案例分析。
從具體流程上看:導入starter場景啟動器後,根據SpringBoot的預設規定,首先找到META-INF包下的spring.factories工廠,通過讀取
EnableAutoConfiguration(自動啟動配置,下稱自啟動)
屬性的值擷取啟動時加載的類 :
XXXAutoConfiguration(XXX自動配置類)
。在自動配置類裡,利用
@Bean
注解把場景下相關元件注冊進容器中。
@Bean在這裡起到重要作用:
- 用Spring的話說就是将對象的建立交給Bean factory(bean工廠),即控制反轉IOC;
- 用Java的話就是利用Java的class類(反射機制),使對象在被建立的時候,由一個調控系統内所有對象的外界實體将其所依賴的對象的引用傳遞給它)
這些元件的核心配置項會通過
@EnableConfigurationProperties
注解跟
XXXProperties
配置檔案綁定。
由此我們可以獲得配置類
XXXAutoConfiguration
與配置項
XXXProperties
資訊,其中:
- 配置類
裡配置了核心元件;XXXAutoConfiguration
- 配置項
裡包含需要修改的配置屬性與預設參數;XXXProperties
配置項XXXProperties裡主要包含兩個資訊:
- 其一是通過@ConfigurationProperties注解可以擷取配置檔案的字首prefix=Constants.XXX;
- 其二是配置項可修改的參數(YYY)名稱及參數(ZZZ)。我們在yml裡通過[字首.參數名稱=參數](XXX.YYY=ZZZ)修改預設參數;
- 其一是通過@ConfigurationProperties注解可以擷取配置檔案的字首prefix=Constants.XXX;