Spring,Spring MVC伊佃,Spring Boot 三者比較
Spring 框架就像一個(gè)家族窜司,有眾多衍生產(chǎn)品例如 boot、security航揉、jpa等等塞祈。但他們的基礎(chǔ)都是Spring 的 ioc和 aop ioc 提供了依賴注入的容器 aop ,解決了面向橫切面的編程帅涂,然后在此兩者的基礎(chǔ)上實(shí)現(xiàn)了其他延伸產(chǎn)品的高級(jí)功能议薪。Spring MVC是基于 Servlet 的一個(gè) MVC 框架 主要解決 WEB 開發(fā)的問(wèn)題胀葱,因?yàn)?Spring 的配置非常復(fù)雜,各種XML笙蒙、 JavaConfig抵屿、hin處理起來(lái)比較繁瑣。于是為了簡(jiǎn)化開發(fā)者的使用捅位,從而創(chuàng)造性地推出了Spring boot轧葛,約定優(yōu)于配置,簡(jiǎn)化了spring的配置流程艇搀。
說(shuō)得更簡(jiǎn)便一些:Spring 最初利用“工廠模式”(DI)和“代理模式”(AOP)解耦應(yīng)用組件尿扯。大家覺得挺好用,于是按照這種模式搞了一個(gè) MVC框架(一些用Spring 解耦的組件)焰雕,用開發(fā) web 應(yīng)用( SpringMVC )衷笋。然后有發(fā)現(xiàn)每次開發(fā)都寫很多樣板代碼,為了簡(jiǎn)化工作流程矩屁,于是開發(fā)出了一些“懶人整合包”(starter)辟宗,這套就是 Spring Boot。
Spring MVC的功能
Spring MVC提供了一種輕度耦合的方式來(lái)開發(fā)web應(yīng)用吝秕。
Spring MVC是Spring的一個(gè)模塊泊脐,是一個(gè)web框架。通過(guò)Dispatcher Servlet, ModelAndView 和 View Resolver烁峭,開發(fā)web應(yīng)用變得很容易容客。解決的問(wèn)題領(lǐng)域是網(wǎng)站應(yīng)用程序或者服務(wù)開發(fā)——URL路由、Session约郁、模板引擎缩挑、靜態(tài)Web資源等等。
Spring Boot的功能
Spring Boot實(shí)現(xiàn)了自動(dòng)配置鬓梅,降低了項(xiàng)目搭建的復(fù)雜度供置。(遵循約定大于配置)
眾所周知Spring框架需要進(jìn)行大量的配置,Spring Boot引入自動(dòng)配置的概念己肮,讓項(xiàng)目設(shè)置變得很容易士袄。Spring Boot本身并不提供Spring框架的核心特性以及擴(kuò)展功能悲关,只是用于快速谎僻、敏捷地開發(fā)新一代基于Spring框架的應(yīng)用程序。也就是說(shuō)寓辱,它并不是用來(lái)替代Spring的解決方案艘绍,而是和Spring框架緊密結(jié)合用于提升Spring開發(fā)者體驗(yàn)的工具。同時(shí)它集成了大量常用的第三方庫(kù)配置(例如Jackson, JDBC, Mongo, Redis, Mail等等)秫筏,Spring Boot應(yīng)用中這些第三方庫(kù)幾乎可以零配置的開箱即用(out-of-the-box)诱鞠,大部分的Spring Boot應(yīng)用都只需要非常少量的配置代碼挎挖,開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。
Spring Boot只是承載者航夺,輔助你簡(jiǎn)化項(xiàng)目搭建過(guò)程的蕉朵。如果承載的是WEB項(xiàng)目,使用Spring MVC作為MVC框架阳掐,那么工作流程和你上面描述的是完全一樣的始衅,因?yàn)檫@部分工作是Spring MVC做的而不是Spring Boot。
對(duì)使用者來(lái)說(shuō)缭保,換用Spring Boot以后汛闸,項(xiàng)目初始化方法變了,配置文件變了艺骂,另外就是不需要單獨(dú)安裝Tomcat這類容器服務(wù)器了诸老,maven打出jar包直接跑起來(lái)就是個(gè)網(wǎng)站,但你最核心的業(yè)務(wù)邏輯實(shí)現(xiàn)與業(yè)務(wù)流程實(shí)現(xiàn)沒有任何變化钳恕。
所以别伏,用最簡(jiǎn)練的語(yǔ)言概括就是:
Spring 是一個(gè)“引擎”;
Spring MVC 是基于Spring的一個(gè) MVC 框架 忧额;
Spring Boot 是基于Spring4的條件注冊(cè)的一套快速開發(fā)整合包畸肆。
因?yàn)?Spring 的配置非常復(fù)雜,各種xml宙址,properties處理起來(lái)比較繁瑣轴脐。于是為了簡(jiǎn)化開發(fā)者的使用,Spring社區(qū)創(chuàng)造性地推出了Spring Boot抡砂,它遵循約定優(yōu)于配置大咱,極大降低了Spring使用門檻,但又不失Spring原本靈活強(qiáng)大的功能注益,下面用一張圖來(lái)描述三者的關(guān)系:
總結(jié):
Spring 最初利用“工廠模式”( DI )和“代理模式”( AOP )解耦應(yīng)用組件碴巾。按照這種模式搞了一個(gè) MVC 框架(一些用 Spring 解耦的組件),用開發(fā) web 應(yīng)用( SpringMVC )丑搔。后來(lái)發(fā)現(xiàn)每次開發(fā)都要搞很多依賴厦瓢,寫很多樣板代碼,使代碼臃腫而麻煩啤月,于是聰明的前人整理了一些懶人整合包( starter )煮仇,這套就是 Spring Boot 。
https://www.zhihu.com/question/64671972
SpringMVC 處理請(qǐng)求過(guò)程
SpringMVC框架是一個(gè)基于請(qǐng)求驅(qū)動(dòng)的Web框架谎仲,并且使用了‘前端控制器’模型來(lái)進(jìn)行設(shè)計(jì)浙垫,再根據(jù)‘請(qǐng)求映射規(guī)則’分發(fā)給相應(yīng)的頁(yè)面控制器進(jìn)行處理。
(一)整體流程
具體步驟:
1、 首先用戶發(fā)送請(qǐng)求————>前端控制器夹姥,前端控制器根據(jù)請(qǐng)求信息(如 URL)來(lái)決定選擇哪一個(gè)頁(yè)面控制器進(jìn)行處理并把請(qǐng)求委托給它杉武,即以前的控制器的控制邏輯部分;圖 2-1 中的 1辙售、2 步驟轻抱;
2、 頁(yè)面控制器接收到請(qǐng)求后旦部,進(jìn)行功能處理十拣,首先需要收集和綁定請(qǐng)求參數(shù)到一個(gè)對(duì)象,這個(gè)對(duì)象在 Spring Web MVC 中叫命令對(duì)象志鹃,并進(jìn)行驗(yàn)證夭问,然后將命令對(duì)象委托給業(yè)務(wù)對(duì)象進(jìn)行處理;處理完畢后返回一個(gè) ModelAndView(模型數(shù)據(jù)和邏輯視圖名)曹铃;圖 2-1 中的 3缰趋、4、5 步驟陕见;
3秘血、 前端控制器收回控制權(quán),然后根據(jù)返回的邏輯視圖名评甜,選擇相應(yīng)的視圖進(jìn)行渲染灰粮,并把模型數(shù)據(jù)傳入以便視圖渲染;圖 2-1 中的步驟 6忍坷、7粘舟;
4、 前端控制器再次收回控制權(quán)佩研,將響應(yīng)返回給用戶柑肴,圖 2-1 中的步驟 8;至此整個(gè)結(jié)束旬薯。
(二)核心流程
大圖:注意編號(hào)順序:
具體步驟:
1晰骑、 首先用戶發(fā)送請(qǐng)求——>DispatcherServlet,前端控制器收到請(qǐng)求后自己不進(jìn)行處理绊序,而是委托給其他的解析器進(jìn)行處理硕舆,作為統(tǒng)一訪問(wèn)點(diǎn),進(jìn)行全局的流程控制骤公;
2抚官、 DispatcherServlet——>HandlerMapping,HandlerMapping 將會(huì)把請(qǐng)求映射為 HandlerExecutionChain 對(duì)象(包含一個(gè) Handler 處理器(頁(yè)面控制器)對(duì)象淋样、多個(gè) HandlerInterceptor 攔截器)對(duì)象耗式,通過(guò)這種策略模式胁住,很容易添加新的映射策略趁猴;
3刊咳、 DispatcherServlet——>HandlerAdapter,HandlerAdapter 將會(huì)把處理器包裝為適配器儡司,從而支持多種類型的處理器娱挨,即適配器設(shè)計(jì)模式的應(yīng)用,從而很容易支持很多類型的處理器捕犬;
4跷坝、 HandlerAdapter——>處理器功能處理方法的調(diào)用,HandlerAdapter 將會(huì)根據(jù)適配的結(jié)果調(diào)用真正的處理器的功能處理方法碉碉,完成功能處理柴钻;并返回一個(gè) ModelAndView 對(duì)象(包含模型數(shù)據(jù)、邏輯視圖名)垢粮;
5贴届、 ModelAndView 的邏輯視圖名——> ViewResolver, ViewResolver 將把邏輯視圖名解析為具體的 View蜡吧,通過(guò)這種策略模式毫蚓,很容易更換其他視圖技術(shù);
6昔善、 View——>渲染元潘,View 會(huì)根據(jù)傳進(jìn)來(lái)的 Model 模型數(shù)據(jù)進(jìn)行渲染,此處的 Model 實(shí)際是一個(gè) Map 數(shù)據(jù)結(jié)構(gòu)君仆,因此很容易支持其他視圖技術(shù)翩概;
7、 返回控制權(quán)給 DispatcherServlet返咱,由 DispatcherServlet 返回響應(yīng)給用戶氮帐,到此一個(gè)流程結(jié)束。
(三)總結(jié)核心開發(fā)步驟
1洛姑、 DispatcherServlet 在 web.xml 中的部署描述上沐,從而攔截請(qǐng)求到 Spring Web MVC
2、 HandlerMapping 的配置楞艾,從而將請(qǐng)求映射到處理器
3参咙、 HandlerAdapter 的配置,從而支持多種類型的處理器
4硫眯、 ViewResolver 的配置蕴侧,從而將邏輯視圖名解析為具體視圖技術(shù)
5、 處理器(頁(yè)面控制器)的配置两入,從而進(jìn)行功能處理
原文:https://blog.csdn.net/zhaolijing2012/article/details/41596803