阿里一面:講一講 Spring、SpringMVC、SpringBoot、SpringCloud 之間的關(guān)系?
大家好,我是Tom哥~
搞后端開發(fā)的同學(xué),對(duì) Spring 家族一定不陌生。
Spring 全家桶了為了解決不同場(chǎng)景的問(wèn)題,逐漸演化出多套生態(tài)環(huán)框,如:Spring、SpringMVC、SpringBoot、SpringCloud
它們之間的關(guān)系:
Spring
Spring 一站式的輕量級(jí)的java開發(fā)框架,采用容器化管理,創(chuàng)建各種 Bean 實(shí)例,并維護(hù)著 bean 與bean之間的關(guān)系。
兩大核心利器:
- IOC(控制反轉(zhuǎn))
- AOP(面向切面)
為Java應(yīng)用程序開發(fā)提供了全面的基礎(chǔ)架構(gòu)支持。包含很多開箱即用的模塊,如:SpringJDBC、SpringSecurity、SpringAOP、SpringORM,提高了應(yīng)用開發(fā)的效率。
Spring MVC
一個(gè)網(wǎng)站通常有前臺(tái)頁(yè)面和后臺(tái)處理邏輯,為了打通這層關(guān)系,衍生出類似 struts2 框架。專門解決前臺(tái)頁(yè)面與后端數(shù)據(jù)處理之間的映射關(guān)系。
當(dāng)然,Spring 家族為了維護(hù)其生態(tài)地位,把這種 MVC 模式的優(yōu)勢(shì)吸收了進(jìn)來(lái),加以改造,于是就誕生了 Spring MVC
Spring MVC是 Spring 的 web 框架。
通過(guò)Dispatcher Servlet、ModelAndView和View Resolver,開發(fā)web應(yīng)用變得很容易。主要針對(duì)的是帶頁(yè)面的系統(tǒng)開發(fā),URL路由、Session、模板引擎、靜態(tài)Web資源等等。
SpringMVC = Struts2 + Spring
處理流程:
Spring MVC 框架與其他 Web MVC 框架一樣,是請(qǐng)求驅(qū)動(dòng)的,圍繞一個(gè)中央 Servlet 設(shè)計(jì),該 Servlet 將請(qǐng)求分派給控制器并提供其他功能以促進(jìn) Web 應(yīng)用程序的開發(fā)。然而,Spring 的 DispatcherServlet 不僅僅如此。它與 Spring IoC 容器完全集成,因此允許您使用 Spring 的其他功能。
Spring Boot
Spring 配置復(fù)雜,xml文件有大量的bean定義,開發(fā)起來(lái)繁瑣。
另外,分布式時(shí)代,微服務(wù)盛行,為了統(tǒng)一后端框架,便于運(yùn)維維護(hù),開始推行 Spring Boot。
Spring Boot 是Spring框架的擴(kuò)展,提供更加 豐富的注解,可以參考之前文章 Spring Boot 常用注解一網(wǎng)打盡
同時(shí),將Servlet容器集成到框架中,如:Tomcat、Jetty、Undertow,我們開發(fā)時(shí)不需要再手動(dòng)在 IDEA 中配置 tomcat 的路徑,只需要main函數(shù)啟動(dòng)。
Spring Boot 框架相對(duì)于 Spring MVC 框架來(lái)說(shuō),更專注于后端接口,不開發(fā)前端頁(yè)面,推崇前后分離。
根據(jù) 約定勝于配置 原則,與市場(chǎng)主流的開源框架打通, 設(shè)計(jì)了 Starter 和 AutoConfiguration 機(jī)制,簡(jiǎn)化配置流程,通過(guò)簡(jiǎn)單的jar包引入,快速具備組件集成能力。大大提高了程序員的開發(fā)效率。
下面列舉了常用的 Starter 組件:
- spring-boot-starter:核心啟動(dòng)器,包含了自動(dòng)配置、日志和YAML
- spring-boot-starter-web:構(gòu)建Web應(yīng)用,使用 Tomcat 作為內(nèi)嵌容器
- spring-boot-starter-amqp:通過(guò)spring-rabbit來(lái)支持AMQP協(xié)議(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數(shù)據(jù)
- spring-boot-starter-logging:Spring Boot默認(rèn)的日志框架Logback
- 更多,這里就不一一列舉了
歷史文章:
一文讀懂Spring Boot各模塊組件依賴關(guān)系
Spring Cloud
分布式時(shí)代,系統(tǒng)間需要打通、組成集群,從而具備更大吞吐能力。我們會(huì)將一個(gè)單體項(xiàng)目拆分成多個(gè)微服務(wù),每個(gè)微服務(wù)系統(tǒng)獨(dú)立技術(shù)選型、開發(fā)、部署上線,各個(gè)微服務(wù)之間打通、相互協(xié)調(diào),從而完成全流程服務(wù)。
當(dāng)然,為了降低不同微服務(wù)系統(tǒng)間的差異化接入成本,通常都是統(tǒng)一基于 Spring Boot 構(gòu)建微服務(wù)系統(tǒng)。
Spring Cloud 將多個(gè) Spring Boot 單體微服務(wù)整合、管理,是一系列框架的有序集合,利用Spring Boot的開發(fā)便利性簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā)。
Spring Cloud 關(guān)注 微服務(wù)整合、管理的服務(wù)治理框架,具有生態(tài)定位,提供豐富的組件框架,如:
- 服務(wù)注冊(cè)、發(fā)現(xiàn)
- 服務(wù)間調(diào)用
- 負(fù)載均衡
- 網(wǎng)關(guān)
- 配置中心
- 斷路器
- 消息總線
- 監(jiān)控 等
鏈接:https://www.springcloud.cc/
最后小結(jié)
1、Spring 框架就像一個(gè)家族,有眾多衍生產(chǎn)品,如:Spring Boot 、Spring security、jpa等,但他們的基礎(chǔ)都是Spring的IOC、AOP等,IOC提供了依賴注入的容器,AOP解決了面向切面編程,在此兩者基礎(chǔ)上實(shí)現(xiàn)其他延伸產(chǎn)品的高級(jí)功能
2、Spring MVC 是基于Servlet的一個(gè)MVC框架,主要解決Web開發(fā)問(wèn)題,因?yàn)镾pring的配置非常復(fù)雜,各種XML、JavaConfig、servlet處理起來(lái)比較繁瑣
3、為了簡(jiǎn)化開發(fā)者的使用,從而創(chuàng)造性的推出了Spring Boot框架,約定勝于配置,簡(jiǎn)化Spring MVC的配置流程。
區(qū)別于Spring MVC的是,Spring Boot專注于微服務(wù)的接口開發(fā),和前端解耦。雖然Spring Boot也可以做成Spring MVC前后臺(tái)一起開發(fā),但不符合Spring Boot框架的初衷。
4、對(duì)于Spring Cloud框架來(lái)說(shuō),它和Spring Boot一樣,關(guān)注的是微服務(wù)的開發(fā)。但Spring Cloud更關(guān)注的是多個(gè)微服務(wù)系統(tǒng)的整合和管理,相當(dāng)于多個(gè)Spring Boot框架的單體微服務(wù)。
本文轉(zhuǎn)載自微信公眾號(hào)「微觀技術(shù)」