說說SpringMVC、SpringBoot和SpringCloud三者之間的聯系和區別


這個問題是我在參加一次面試晚會活動上被問到的一個問題,看標題顯然很簡單就能夠回答出來,但是仔細一琢磨,平時蒙頭苦干的我們可能缺少關注和積累,好像並不能用較專業的術語和邏輯很順暢的表達出來,於是我簡要的翻了翻資料,然后整理出了這篇文章。

Spring框架是一個大集合,也像一個大家族【可以到spring.io官網了解】。但家庭成員的基礎都是基於Spring的IoC和AOP特性, IoC提供了依賴注入(DI)的容器,可謂是核心,AOP則提供了面向切面的編程方案,在前兩者的基礎上,繼續演化升級實現了其他延伸產品的高級功能。

內容提要

Spring MVC是基於Servlet實現的一個前端MVC框架,主要解決WEB項目開發的問題。因為在業務開發的過程中發現Spring的配置非常復雜,各種XML、Config等處理起來比較繁瑣。於是為了簡化開發者的使用,從而創造性地推出了Spring boot,約定優於配置,簡化了spring的配置流程。在業務日益繁雜和龐大的進程中,很多企業已經疲於應付龐大的業務模塊和錯綜復雜的數據交互,於是微服務的理念開始提了出來,Spring根據這個理念打造出來微服務全家桶Spring Cloud,這其中有非常多高效的組件活躍在微服務生態中,微服務是基於Spring Boot進行開發的.

簡單通俗地來理解就是:Spring最初利用“工廠模式”(DI)和“代理模式”(AOP)解耦應用組件,大家覺得很好用,於是按照這種模式搞了一個MVC框架(一些用Spring解耦的組件)用於開發 web應用,這也就是我們熟悉的SpringMVC,然后又發現每次開發都寫很多同樣形式的代碼現得很累贅,為了簡化工作流程,就開發出了一些“懶人整合包”(starter)的模式,這套就是Spring Boot,后面項目越做越大交互越來約繁雜,大家已經在業務和運維的路上越走越疲憊了,於是業界就出現了微服務的概念,將不同的業務進行拆分,Spring基於此搞出了一套SpringCloud作為微服務的解決方案。

Spring MVC

Spring MVC是一個前端的MVC框架,它提供了一種輕度耦合的方式來開發Web應用,通過Dispatcher Servlet、ModelAndView以及View Resolver的聯合使得Web應用開發變得更加容易。SpringMVC采用“請求-響應”的模型將Web層進行解耦,項目結構分層明顯職責划分清晰,控制器負責接受請求、委派處理給其他Bean然后返回請求響應,通過Spring被注入的其他Bean則支持了具體的業務執行,然后以ModelAndView的方式返回響應內容。SpringMVC主要解決的問題領域是網站應用程序或者服務開發——URL路由、Session、模板引擎和靜態Web資源等等。

優點:SpringMVC簡單但是靈活性強,框架易於擴展。

缺點:SpringMVC與Servlet耦合了,不能脫離容器獨立運行;框架過於細分使得開發效率低。

Spring Boot

Spring Boot引入自動配置的概念,讓項目設置變得很容易。Spring Boot本身並不提供Spring框架的核心特性以及擴展功能,只是用於快速、敏捷地開發新一代基於Spring框架的應用程序。也就是說,它並不是用來替代Spring的解決方案,而是和Spring框架緊密結合用於提升Spring開發者體驗的工具。同時它集成了大量常用的第三方庫配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot應用中這些第三方庫幾乎可以零配置的開箱即用(out-of-the-box),大部分的Spring Boot應用都只需要非常少量的配置代碼,開發者能夠更加專注於業務邏輯。Spring Boot只是承載者,輔助開發者簡化項目搭建過程的。如果承載的是WEB項目,使用Spring MVC作為MVC框架,那么工作流程和Spring MVC的是完全一樣的,因為這部分工作是Spring MVC做的而不是Spring Boot。

通過官網的摘要我們也能夠看出,SpringBoot提供服務單獨運行的能力,而且內嵌容器如Tomcat、Jetty或者Undertow等,SpringBoot的項目在配置上做到了極簡,通過spring自動配置讓你解脫對項目配置依賴的過分關注,同時,SpringBoot的注解方式讓我們從紛繁復雜的XML配置中徹底的解放了出來。

springboot 要解決的問題:

1、如何精簡配置;如何讓編碼、部署、監控變簡單;

2、如何方便的讓spring生態圈和其他工具鏈整合。

優點:搭建項目簡單,配合Maven看看文檔就能夠搭建出一個新的項目;配置簡單高效,開發敏捷,部署便利。

缺點:因為簡單所以屏蔽了背后復雜的實現,這讓不熟悉Spring的開發者在后續問題的解決上變得困難。

Spring Cloud

Spring Cloud為分布式系統快速構建行業統一特征模式的應用提供了一個行之有效的解決工具箱,諸如配置管理、服務發現、熔斷器、只能路由、微服務代理、控制總線、一次性令牌、全局鎖、領導選舉、分布式會話以及集群狀態等,通過各分布式微服務組件的實現以及協調使用,開發者能夠快速構建出運行良好的服務。

顯然,Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring並沒有重復制造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了復雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包。

微服務是可以獨立部署、水平擴展、獨立訪問(或者有獨立的數據庫)的服務單元,Spring Cloud就是這些微服務的大管家,采用了微服務這種架構之后,項目的數量會非常多,Spring Cloud作為大管家需要管理好這些微服務,通過Spring Cloud官網我們可以看到有很多組件為微服務助力,使得這種微服務架構在服務眾多之時也便於通訊、管理和維護。

優點:得益於SpringBoot的開發便利性,讓微服務的實現變得簡單可行;作為微服務解決方案,考慮全面並且方便使用基本上都是開箱即用;配置和使用都簡單,只需要簡單的配置即可實現復雜的功能。

缺點:因為微服務體系中涉及到眾多的框架,加重了學習成本,同時為后期的運維帶來了困難。

學習總結

Spring是一個“引擎”;

Spring MVC是基於Spring的一個MVC框架;

Spring Boot是基於Spring4的條件注冊的一套快速開發整合包;

Spring Cloud是基於Spring Boot搭建的分布式微服務系統解決方案。

參考資料

1、http://www.cnblogs.com/zhonglihai/p/9109413.html

2、https://spring.io/projects

3、http://www.ityouknow.com/springcloud/2017/05/01/simple-springcloud.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM