阿里一面:講一講 Spring、SpringMVC、SpringBoot、SpringCloud 之間的關係?

語言: CN / TW / HK

大家好,我是Tom哥~

搞後端開發的同學,對 Spring 家族一定不陌生。

Spring 全家桶了為了解決不同場景的問題,逐漸演化出多套生態環框,如:Spring、SpringMVC、SpringBoot、SpringCloud

它們之間的關係:

Spring

Spring 一站式的輕量級的java開發框架,採用容器化管理,建立各種 Bean 例項,並維護著 bean 與bean之間的關係。

兩大核心利器:

  • IOC(控制反轉)

  • AOP(面向切面)

為Java應用程式開發提供了全面的基礎架構支援。包含很多開箱即用的模組,如:SpringJDBC、SpringSecurity、SpringAOP、SpringORM,提高了應用開發的效率。

Spring MVC

一個網站通常有前臺頁面和後臺處理邏輯,為了打通這層關係,衍生出類似 struts2 框架。專門解決前臺頁面與後端資料處理之間的對映關係。

當然,Spring 家族為了維護其生態地位,把這種 MVC 模式的優勢吸收了進來,加以改造,於是就誕生了 Spring MVC

Spring MVC是 Spring 的 web 框架。

通過 Dispatcher ServletModelAndViewView Resolver ,開發web應用變得很容易。主要針對的是帶頁面的系統開發,URL路由、Session、模板引擎、靜態Web資源等等。

SpringMVC = Struts2 + Spring

處理流程:

Spring MVC 框架與其他 Web MVC 框架一樣,是請求驅動的,圍繞一箇中央 Servlet 設計,該 Servlet 將請求分派給控制器並提供其他功能以促進 Web 應用程式的開發。然而,Spring 的 DispatcherServlet 不僅僅如此。它與 Spring IoC 容器完全整合,因此允許您使用 Spring 的其他功能。

Spring Boot

Spring 配置複雜,xml檔案有大量的bean定義,開發起來繁瑣。

另外,分散式時代,微服務盛行,為了統一後端框架,便於運維維護,開始推行 Spring Boot。

Spring Boot 是Spring框架的擴充套件,提供更加 豐富的註解 ,可以參考之前文章 Spring Boot 常用註解一網打盡

同時,將Servlet容器整合到框架中,如: TomcatJettyUndertow ,我們開發時不需要再手動在 IDEA 中配置 tomcat 的路徑,只需要 main函式 啟動。

Spring Boot 框架相對於 Spring MVC 框架來說,更專注於後端介面,不開發前端頁面,推崇 前後分離

根據 約定勝於配置 原則,與市場主流的開源框架打通, 設計了 StarterAutoConfiguration 機制,簡化配置流程,通過簡單的jar包引入,快速具備元件整合能力。大大提高了程式設計師的開發效率。

下面列舉了常用的 Starter 元件:

  • spring-boot-starter:核心啟動器,包含了自動配置、日誌和YAML

  • spring-boot-starter-web:構建Web應用,使用 Tomcat 作為內嵌容器

  • spring-boot-starter-amqp:通過spring-rabbit來支援AMQP協議(Advanced Message Queuing Protocol

  • spring-boot-starter-aop:面向方面的程式設計即AOP,包括spring-aop和AspectJ

  • spring-boot-starter-groovy-templates:支援Groovy模板引擎

  • spring-boot-starter-data-redis:使用Redis 和 Spring Data Redis,以及Jedis 客戶端

  • spring-boot-starter-data-elasticsearch:支援ElasticSearch搜尋和分析引擎

  • spring-boot-starter-data-jpa:支援 Java Persistence API

  • spring-boot-starter-data-mongodb:支援MongoDB資料

  • spring-boot-starter-logging:Spring Boot預設的日誌框架Logback

  • 更多,這裡就不一一列舉了

歷史文章:

Spring Cloud

分散式時代,系統間需要打通、組成叢集,從而具備更大吞吐能力。我們會將一個單體專案拆分成多個微服務,每個微服務系統獨立技術選型、開發、部署上線,各個微服務之間打通、相互協調,從而完成全流程服務。

當然,為了降低不同微服務系統間的差異化接入成本,通常都是統一基於 Spring Boot 構建微服務系統。

Spring Cloud 將多個 Spring Boot 單體微服務整合、管理,是一系列框架的有序集合,利用Spring Boot的開發便利性簡化了分散式系統基礎設施的開發。

Spring Cloud 關注 微服務整合、管理的服務治理框架,具有生態定位 ,提供豐富的元件框架,如:

  • 服務註冊、發現

  • 服務間呼叫

  • 負載均衡

  • 閘道器

  • 配置中心

  • 斷路器

  • 訊息匯流排

  • 監控 等

連結:https://www.springcloud.cc/

最後小結

1、Spring 框架就像一個家族,有眾多衍生產品,如:Spring Boot 、Spring security、jpa等,但他們的基礎都是Spring的IOC、AOP等,IOC提供了依賴注入的容器,AOP解決了面向切面程式設計,在此兩者基礎上實現其他延伸產品的高階功能

2、Spring MVC 是基於Servlet的一個MVC框架,主要解決Web開發問題,因為Spring的配置非常複雜,各種XML、JavaConfig、servlet處理起來比較繁瑣

3、為了簡化開發者的使用,從而創造性的推出了Spring Boot框架,約定勝於配置,簡化Spring MVC的配置流程。

區別於Spring MVC的是,Spring Boot專注於微服務的介面開發,和前端解耦。雖然Spring Boot也可以做成Spring MVC前後臺一起開發,但不符合Spring Boot框架的初衷。

4、對於Spring Cloud框架來說,它和Spring Boot一樣,關注的是微服務的開發。但Spring Cloud更關注的是多個微服務系統的整合和管理,相當於多個Spring Boot框架的單體微服務。

關於我:Tom哥,前阿里P7技術專家,出過專利,多年大廠實戰經驗。歡迎關注,我會持續輸出更多經典原創文章,為你大廠助力。

歡迎小夥伴找Tom哥嘮嗑聊天, 技術交流,圍觀朋友圈,人生打怪不再寂寞。

:+1: 《我想去大廠列》(包含Java、MySQL、Redis、MQ訊息佇列、TCP網路、專案亮點、團隊管理等)

:+1: SpringBoot 生態系列,JPA、ElasticSearch、Kafka、Redis等幾十個主流開源框架