阿里一面:講一講 Spring、SpringMVC、SpringBoot、SpringCloud 之間的關系?
大家好,我是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 Servlet、ModelAndView和View 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容器集成到框架中,如:Tomcat、Jetty、Undertow,我們開發時不需要再手動在 IDEA 中配置 tomcat 的路徑,只需要main函數啟動。
Spring Boot 框架相對于 Spring MVC 框架來說,更專注于后端接口,不開發前端頁面,推崇前后分離。
根據 約定勝于配置 原則,與市場主流的開源框架打通, 設計了 Starter 和 AutoConfiguration 機制,簡化配置流程,通過簡單的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 Boot各模塊組件依賴關系
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框架的單體微服務。
本文轉載自微信公眾號「微觀技術」