工作兩年才真正搞懂Spring的核心概念:spring基礎框架及技術生態

程序員高級碼農ii 發佈 2024-01-07T18:24:30.051358+00:00

引入Spring Boot在當下的網際網路應用中,業務體系發展日益複雜,同時業務功能的開發往往伴隨著需求的不斷變化。以常見的電商類應用為例,其承載的業務功能複雜度以及快速疊代要求的開發速度,與5年前的同類業務系統,面臨著諸多新的挑戰。

引入spring Boot

在當下的網際網路應用中,業務體系發展日益複雜,同時業務功能的開發往往伴隨著需求的不斷變化。以常見的電商類應用為例,其承載的業務功能複雜度以及快速疊代要求的開發速度,與5年前的同類業務系統,面臨著諸多新的挑戰。這些挑戰中核心的一點就是快速高效地實現系統功能,同時保證代碼持續可維護,這是一個非常現實且亟待解決的問題。

面對這樣的挑戰,我們仍需要保持開發過程的簡單性,而這種簡單性很大程度上來自開發框架。對於Java EE領域而言,Spring無疑是當下最主流的開發框架。但從Spring的組成而言,實際上我們已經很難把它看作一個單獨的框架,它是由一組框架所構成的生態系統。在這個生態系統中,SpringBoot作為Spring家族的一員,在傳統Spring框架的基礎上做了創新和優化,將開發人員從以往繁瑣的配置工作中解放了出來,並提供了大量即插即用的集成化組件,從而減少了開發過程中各種組件之間複雜的整合,提高了開發效率,降低了維護成本。

Spring Boot是一款集成性的開源框架,內部整合了很多第三方組件和框架。這些組件和框架應用如此之廣泛,以至於大家反而對如何更好地使用Spring Boot自身的功能特性並不是很重視。事實上,Spring Boot自身的功能特性同樣非常豐富,而且在使用上也存在一些最佳實踐。

本章作為全書的開篇,將簡要介紹Spring Boot的基本概念和功能體系,並給出實戰案例。

Spring核心概念

隨著Spring的不斷發展,越來越多的技術體系融入了Spring生態中,從而誕生了一大批開發框架。但這些開發框架都是從Spring基礎框架逐步演進而來的,本節將從Spring基礎框架所包含的依賴注入和面向切面等核心概念開始,對整個Spring家族技術生態進行簡要梳理。

Spring基礎框架

Spring基礎框架由Rod Johnson在2003年設計並實現,自誕生之初就被認為是一種容器,其整體架構如圖1-1所示。

我們先來看圖1-1中位於底部的「核心容器」部分,該部分包含了一個容器所應該具備的主體功能,涉及基於依賴注入(Dependency Injection,DI)的JavaBean處理機制、面向切面編程(Aspect Oriented Programming,AOP)、上下文(Context)以及Spring自身所提供的表達式語言(SpringExpression Language,SpEL)等輔助功能。對於系統開發而言,我們需要在系統運行時基於某個對象的使用需求,動態提供它所依賴的其他對象,而這一點可以通過依賴注入實現。Spring會在適當的時機創建一個Bean,然後像注射器一樣把它注入目標對象中,這樣就完成了對各個對象之間關係的控制。可以說,依賴注入是開發人員使用Spring基礎框架的基本手段,我們通過依賴注入獲取所需的各種Bean。

Spring為開發人員提供了三種不同的依賴注入類型,分別是欄位注入、構造器注入和Setter方法注入。

而所謂的切面,本質上解決的是關注點分離的問題。在面向對象編程的世界中,我們把一個應用程式按照職責和定位拆分成多個對象,這些對象構成了不同的層次。而面向切面編程可以說是面向對象編程的一種補充,目標是將一個應用程式抽象成各個切面,這樣就可以將其單獨抽象為獨立的模塊進行開發和維護。Spring為開發人員提供了連接點(JoinPoint)、通知(Advice)、切點(PointCut)和切面(Aspect)等一系列組件,幫助他們構建面向切面的編程模型。

我們再來看圖1-1的上半部分,這裡包含了構建應用程式所需要的兩大功能組件,即數據訪問和Web服務,它們也是我們日常開發中最常用的組件。這兩大部分組件中包含的內容非常多,而且充分體現了Spring的集成性。也就是說,框架內部整合了業界主流的資料庫驅動、消息中間件、ORM框架等各種工具,開發人員可以根據需要靈活地替換和調整自己想要使用的工具。

從開發語言上講,雖然Spring最廣泛的應用場景是在Java EE領域,但當前的5.x版本也支持Kotlin、Groovy以及各種動態開發語言。

Spring技術生態

我們通過Spring的官方網站來看一下Spring家族技術生態的全景圖。在Spring的主頁中,有七大核心技術體系。

微服務架構:以Spring Boot、Spring Cloud為代表的一套完整構建微服務系統的技術體系。

響應式編程:內置了Project Reactor響應式編程框架的面向Web開發、數據訪問等常見功能的全棧響應式技術體系。

雲原生:以Spring Cloud為代表的一組滿足雲原生架構需求的分布式技術體系。

Web應用:以Spring WebMVC為代表的一批實現REST API的Web技術體系。

Serverless架構:以Spring Cloud Function為代表的FaaS(Functionas a Service)技術體系。

事件驅動:以Spring Cloud Stream為代表的面向事件和消息處理的技術體系。

批處理:以Spring Batch為代表的輕量級離線批處理技術體系。

可以看到,上述技術體系有各自的側重點,但也有一些交集。我們現在能看到的所有Spring家族技術體系都是從Spring基礎框架逐步演進而來的。

Spring技術體系發展到現在,Spring基礎框架更多扮演著內核的角色,而不是直接面向應用開發。在日常開發過程中,如果構建單塊Web服務,可以採用Spring Boot。而如果想要開發微服務架構,那麼就需要使用Spring Cloud。

事實上,想要使用Spring Cloud,必須首先掌握Spring Boot,因為SpringBoot是開發單個微服務的基礎。它們與Spring基礎框架之間的這種「內核→應用→擴展」的關係如圖1-2所示。

本文不對Spring中的所有技術體系全面地展開講解,而是重點關注Spring Boot。Spring Boot是Spring中頂級的子項目,並且已經發展為JavaEE領域開發Web應用程式的首選框架。

本文給大家講解的內容是spring的核心概念:spring基礎框架及技術生態

下文給大家講解的是開發springboot應用程式!

關鍵字: