SpringBoot的設(shè)計(jì)理念和目標(biāo)、整體架構(gòu)你有深入了解嗎
源代碼閱讀工具
讀者可根據(jù)日常習(xí)慣,選擇熟悉的代碼閱讀 I 具,比如 Intellij IDEA、Spring Tool Suite、Eclipse、 MyEclipse 等。
閱讀 Spring Boot 源代碼之前,我們還需搭建基礎(chǔ)閱讀環(huán)境。Spring Boot 對 JDK 和構(gòu)建工具有一定的要求, 比如 JDK 8+、Maven 3.3+、Gradle 5.x+等環(huán)境,滿足相應(yīng)需求即可。
為了達(dá)到更好的學(xué)習(xí)效果,建議大家使用實(shí)例+debug 的模式來進(jìn)行學(xué)習(xí)。因此,源代碼閱讀 I 具最好支持實(shí)例的編寫、運(yùn)行、調(diào)試等功能。
本文使用 Itellj IDEA (簡稱 IDEA) 作為閱讀代碼工具,采用純源代碼閱讀、實(shí)例+debug 兩種模式配合進(jìn)行學(xué)習(xí)。
其中純源代碼閱讀模式可以幫助我們更好地進(jìn)行代碼的注釋、編寫、單元測試等操作,而實(shí)例+debug 模式可以讓我們更好地理解整個(gè)項(xiàng)目的運(yùn)行流程及功能的具體使用。圖 1-2 和圖1-3 展示 了通過 IDEA 閱讀代碼的兩種模式。
Spring Boot 的設(shè)計(jì)理念和目標(biāo)
我們知道,Spring 所擁有的強(qiáng)大功能之一就是可以集成各種開源軟件。 但隨著互聯(lián)網(wǎng)的高速發(fā)展,各種框架層出不窮,這就對系統(tǒng)架構(gòu)的靈活性、擴(kuò)展性、可伸縮性、高可用性都提出了新的要求。隨著項(xiàng)目的發(fā)展,Spring 慢慢地集成了更多的開源軟件,引入大量配置文件,這會(huì)導(dǎo)致程序出錯(cuò)率高、運(yùn)行效率低下的問題。為了解決這些狀況,Spring Boot 應(yīng)運(yùn)而生。
Spring Boot 本身并不提供 Spring 的核心功能,而是作為 Spring 的腳手架框架,以達(dá)到快速構(gòu)建項(xiàng)目、預(yù)置三方配置、開箱即用的目的。
設(shè)計(jì)理念
約定優(yōu)于配置(Convention Over Configuration),又稱為按約定編程,是一種軟件設(shè)計(jì)范式,旨在減少軟件開發(fā)人員需要做決定的數(shù)量,執(zhí)行起來簡單而又不失靈活。Spring Boot 的核心設(shè)計(jì)完美遵從了此范式。
Spring Boot 的功能從細(xì)節(jié)到整體都是基于“約定優(yōu)于配置開發(fā)的,從基礎(chǔ)框架的搭建、配置文件、中間件的集成、內(nèi)置容器以及其生態(tài)中各種 Starters,無不遵從此設(shè)計(jì)范式。Starter
作為 Spring Boot 的核心功能之一,基于自動(dòng)配置代碼提供了自動(dòng)配置模塊及依賴,讓軟件集成變得簡單、易用。與此同時(shí),Spring Boot 也在鼓勵(lì)各方軟件組織創(chuàng)建自己的 Starter。
設(shè)計(jì)目標(biāo)
說到 Spring Boot 的設(shè)計(jì)目標(biāo),值得一提的是 Spring Boot 的研發(fā)團(tuán)隊(duì)一 Pivotal 公司。Pivotal公司的企業(yè)目 標(biāo)是致力于改變世界構(gòu)造軟件的方式(Weare transforming how the worldbuilds software)”。 Pivotal 公 司向企業(yè)客戶提供云原生應(yīng)用開發(fā) PaaS 平臺(tái)及服務(wù),采用敏捷軟件開發(fā)方法論幫助企業(yè)客戶開發(fā)軟件,從而提高軟件開發(fā)人員工作效率、減少軟件運(yùn)維成本,實(shí)現(xiàn)企業(yè)數(shù)字化轉(zhuǎn)型、IT 創(chuàng)新,幫助企業(yè)客戶最終實(shí)現(xiàn)業(yè)務(wù)創(chuàng)新。
Spring Boot 框架的設(shè)計(jì)理念完美遵從了它所屬企業(yè)的目標(biāo)。Spring Boot 不是為已解決的問題提供新的解決方案,而是為平臺(tái)和開發(fā)者帶來一種全新的體驗(yàn):整合成熟技術(shù)框架、屏蔽系統(tǒng)復(fù)雜性、簡化已有技術(shù)的使用,從而降低軟件的使用]檻,提升軟件開發(fā)和運(yùn)維的效率。
Spring Boot 的整體架構(gòu)
在 1.2 節(jié)中已經(jīng)對 Spring Boot 的核心項(xiàng)目結(jié)構(gòu)及功能做了相應(yīng)的介紹,本節(jié)我們從架構(gòu)層面 了 解 一 下 Spring Boot 的 不同模 塊之間的依 賴 關(guān) 系 如 圖 1-4 所示 。
圖 1-4 中為了更清晰地表達(dá) Spring Boot 各項(xiàng)目之間的關(guān)系,我們基于依賴的傳遞性,省略了部分依賴關(guān)系。比如,Spring Boot Starters 不僅依賴了 Spring Boot Autoconfigure 項(xiàng)目,還依賴了 Spring Boot 和 Spring,而 SpringBoot Autoconfigure 項(xiàng)目又依賴了 Spring Boot,Spring Boot 又依賴了 Spring 相關(guān)項(xiàng)目。因此在圖中就省略了 Spring Boot Starters 和底層依賴的關(guān)聯(lián)。
Spring Boot Parent 是 Spring Boot 及圖中依賴 Spring Boot 項(xiàng)目的 Parent 項(xiàng)目,同樣為了結(jié)構(gòu)清晰,圖中不顯示相關(guān)關(guān)聯(lián)。
從圖 1-4 中我們可以清晰地看到 Spring Boot 幾乎完全基于 Spring,同時(shí)提供了 Spring Boot和 Spring Boot Autoconfigure 兩個(gè)核心的模塊,而其他相關(guān)功能又都是基于這兩個(gè)核心模塊展開的。本文相關(guān)的源代碼分析也是圍繞兩個(gè)核心模塊展開。