原始碼閱讀工具
讀者可根據日常習慣,選擇熟悉的程式碼閱讀 I 具,比如 Intellij IDEA、Spring Tool Suite、Eclipse、 MyEclipse 等。
閱讀 Spring Boot 原始碼之前,我們還需搭建基礎閱讀環境。Spring Boot 對 JDK 和構建工具有一定的要求, 比如 JDK 8+、Maven 3.3+、Gradle 5.x+等環境,滿足相應需求即可。
為了達到更好的學習效果,建議大家使用例項+debug 的模式來進行學習。因此,原始碼閱讀 I 具最好支援例項的編寫、執行、除錯等功能。
本文使用 Itellj IDEA (簡稱 IDEA) 作為閱讀程式碼工具,採用純原始碼閱讀、例項+debug 兩種模式配合進行學習。
其中純原始碼閱讀模式可以幫助我們更好地進行程式碼的註釋、編寫、單元測試等操作,而例項+debug 模式可以讓我們更好地理解整個專案的執行流程及功能的具體使用。圖 1-2 和圖1-3 展示 了通過 IDEA 閱讀程式碼的兩種模式。
Spring Boot 的設計理念和目標我們知道,Spring 所擁有的強大功能之一就是可以整合各種開源軟體。 但隨著網際網路的高速發展,各種框架層出不窮,這就對系統架構的靈活性、擴充套件性、可伸縮性、高可用性都提出了新的要求。隨著專案的發展,Spring 慢慢地集成了更多的開源軟體,引入大量配置檔案,這會導致程式出錯率高、執行效率低下的問題。為了解決這些狀況,Spring Boot 應運而生。
Spring Boot 本身並不提供 Spring 的核心功能,而是作為 Spring 的腳手架框架,以達到快速構建專案、預置三方配置、開箱即用的目的。
設計理念
約定優於配置(Convention Over Configuration),又稱為按約定程式設計,是一種軟體設計正規化,旨在減少軟體開發人員需要做決定的數量,執行起來簡單而又不失靈活。Spring Boot 的核心設計完美遵從了此正規化。
Spring Boot 的功能從細節到整體都是基於“約定優於配置開發的,從基礎框架的搭建、配置檔案、中介軟體的整合、內建容器以及其生態中各種 Starters,無不遵從此設計正規化。Starter
作為 Spring Boot 的核心功能之一,基於自動配置程式碼提供了自動配置模組及依賴,讓軟體整合變得簡單、易用。與此同時,Spring Boot 也在鼓勵各方軟體組織建立自己的 Starter。
設計目標
說到 Spring Boot 的設計目標,值得一提的是 Spring Boot 的研發團隊一 Pivotal 公司。Pivotal公司的企業目 標是致力於改變世界構造軟體的方式(Weare transforming how the worldbuilds software)”。 Pivotal 公 司向企業客戶提供雲原生應用開發 PaaS 平臺及服務,採用敏捷軟體開發方法論幫助企業客戶開發軟體,從而提高軟體開發人員工作效率、減少軟體運維成本,實現企業數字化轉型、IT 創新,幫助企業客戶最終實現業務創新。
Spring Boot 框架的設計理念完美遵從了它所屬企業的目標。Spring Boot 不是為已解決的問題提供新的解決方案,而是為平臺和開發者帶來一種全新的體驗:整合成熟技術框架、遮蔽系統複雜性、簡化已有技術的使用,從而降低軟體的使用]檻,提升軟體開發和運維的效率。
Spring Boot 的整體架構在 1.2 節中已經對 Spring Boot 的核心專案結構及功能做了相應的介紹,本節我們從架構層面 了 解 一 下 Spring Boot 的 不同模 塊之間的依 賴 關 系 如 圖 1-4 所示 。
圖 1-4 中為了更清晰地表達 Spring Boot 各專案之間的關係,我們基於依賴的傳遞性,省略了部分依賴關係。比如,Spring Boot Starters 不僅依賴了 Spring Boot Autoconfigure 專案,還依賴了 Spring Boot 和 Spring,而 SpringBoot Autoconfigure 專案又依賴了 Spring Boot,Spring Boot 又依賴了 Spring 相關專案。因此在圖中就省略了 Spring Boot Starters 和底層依賴的關聯。
Spring Boot Parent 是 Spring Boot 及圖中依賴 Spring Boot 專案的 Parent 專案,同樣為了結構清晰,圖中不顯示相關關聯。
從圖 1-4 中我們可以清晰地看到 Spring Boot 幾乎完全基於 Spring,同時提供了 Spring Boot和 Spring Boot Autoconfigure 兩個核心的模組,而其他相關功能又都是基於這兩個核心模組展開的。本文相關的原始碼分析也是圍繞兩個核心模組展開。
本文給大家講解的內容是SpringBoot的設計理念和目標、整體架構下篇文章給大家講解的是SpringBoot核心執行原理;覺得文章不錯的朋友可以轉發此文關注小編;感謝大家的支援!