溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何快速入門SpringIoC和SpringMVC

發(fā)布時(shí)間:2021-10-20 17:27:40 來(lái)源:億速云 閱讀:129 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)如何快速入門SpringIoC和SpringMVC,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

更多內(nèi)容,歡迎關(guān)注微信公眾號(hào):全菜工程師小輝~

Spring的優(yōu)勢(shì)?

  1. 降低了組件之間的耦合性 ,實(shí)現(xiàn)了軟件各層之間的解耦

  2. 可以使用容易提供的眾多服務(wù),如事務(wù)管理,消息服務(wù)等

  3. 容器提供單例模式支持

  4. 容器提供了AOP技術(shù),利用它很容易實(shí)現(xiàn)如權(quán)限攔截,運(yùn)行期監(jiān)控等功能

  5. Spring的IoC機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性

  6. 容器提供了眾多的輔助類,能加快應(yīng)用的開(kāi)發(fā)

  7. Spring對(duì)于主流的應(yīng)用框架提供了集成支持,如Hibernate,JPA,Mybatis等

  8. Spring屬于低侵入式設(shè)計(jì),代碼的污染極低, 并且獨(dú)立于各種應(yīng)用服務(wù)器

  9. Spring的高度開(kāi)放性,并不強(qiáng)制應(yīng)用完全依賴于Spring,開(kāi)發(fā)者可以自由選擇spring的部分或全部。

為什么本文不講AOP?

IoC和AOP是Spring框架的兩大特性,IoC和MVC的流程密不可分,可以看作是面向?qū)ο缶幊痰膶?shí)現(xiàn);而AOP特性則是面向切面編程的體現(xiàn),也是前者的補(bǔ)充,所以可以拆分開(kāi)后續(xù)講解。

> 本文對(duì)SpringIoC和SpringMVC的流程進(jìn)行了簡(jiǎn)單的講解,更加詳細(xì)的過(guò)程,歡迎看筆者的代碼庫(kù),里面幾乎每行代碼都做了詳細(xì)注釋,一個(gè)請(qǐng)求debug跟下來(lái),過(guò)程就一目了然了。

快戳我,我們?nèi)W(xué)習(xí)~

什么是SpringIoC?

控制反轉(zhuǎn)IoC(Inversion of Control),是一種設(shè)計(jì)思想。沒(méi)有IoC的程序中我們使用面向?qū)ο缶幊虒?duì)象的創(chuàng)建與對(duì)象間的依賴關(guān)系完全硬編碼在程序中,對(duì)象的創(chuàng)建由程序自己控制,而使用控制反轉(zhuǎn)后,將對(duì)象的創(chuàng)建轉(zhuǎn)移給第三方。

如何快速入門SpringIoC和SpringMVC

IoC是Spring框架的核心內(nèi)容,使用多種方式完美的實(shí)現(xiàn)了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置實(shí)現(xiàn)IoC。Spring容器在初始化時(shí)先讀取配置文件,根據(jù)配置文件或元數(shù)據(jù)創(chuàng)建與組織對(duì)象存入容器中,程序使用時(shí)再?gòu)腎oC容器中取出需要的對(duì)象。

> 采用XML方式配置Bean的時(shí)候,Bean的定義信息是和實(shí)現(xiàn)分離的,而采用注解的方式可以把兩者合為一體,Bean的定義信息直接以注解的形式定義在實(shí)現(xiàn)類中,從而達(dá)到了零配置的目的。

SpringIoC的過(guò)程?

  1. 基礎(chǔ)包掃描。讀取配置文件,然后根據(jù)配置路徑進(jìn)行全包掃描,,最后將掃描到的類名加上全限定名之后加入到數(shù)組集合中

  2. 實(shí)例化所有帶注解的類。遍歷上一步的數(shù)組集合,判斷類上的注解并實(shí)例化該類,以該類的類名為key,實(shí)例為value,放入哈希表中

  3. 依賴注入。遍歷上一步的哈希表,獲取類上所有Fields,遍歷Fields,判斷Fields上是否為@Autowired類型的注解,如果是的話就把Map中的實(shí)例賦值這個(gè)field

  4. Url地址和方法映射。遍歷第二步的哈希表,如果是Controller實(shí)例,獲取Methods并遍歷,判斷方法上是否含有@RequestMapping注解,如果含有,則獲取它的值,將@Controller的注解值拼接上@RequestMapping值組成key,當(dāng)前method作為value,裝入hanlerMap中

  5. 請(qǐng)求反射調(diào)用。(這一步已經(jīng)屬于MVC范疇)一個(gè)url請(qǐng)求過(guò)來(lái),獲取它的地址,拆分,獲取Controller實(shí)例,獲取Method實(shí)例,反射執(zhí)行Method

什么是SpringMVC?

SpringMVC框架是以請(qǐng)求為驅(qū)動(dòng),圍繞Servlet設(shè)計(jì),將請(qǐng)求發(fā)給控制器,然后通過(guò)模型對(duì)象,分派器來(lái)展示請(qǐng)求結(jié)果視圖。其中核心類是DispatcherServlet,它是一個(gè)Servlet,頂層是實(shí)現(xiàn)的Servlet接口。

為什么要用SpringMVC?

框架的作用一直都是用來(lái)簡(jiǎn)化編程的:
servlet只有doGet和doPost,一個(gè)servlet類只能處理一個(gè)url-pattern。
SpringMVC類里面可以通過(guò)RequestMapping處理很多請(qǐng)求,并且支持Rest風(fēng)格的請(qǐng)求,如DELETE/PUT等;SpringMVC參數(shù)的映射可以直接封裝成實(shí)體類。

SpringMVC的流程

如何快速入門SpringIoC和SpringMVC

流程圖說(shuō)明:

  1. 用戶發(fā)送請(qǐng)求至 前端控制器DispatcherServlet。

  2. 前端控制器DispatcherServlet收到請(qǐng)求后調(diào)用處理器映射器HandlerMapping。

  3. 處理器映射器HandlerMapping根據(jù)請(qǐng)求的Url找到具體的處理器,生成處理器對(duì)象Handler及處理器攔截器HandlerIntercepter(如果有則生成)一并返回給前端控制器DispatcherServlet。

  4. 前端控制器DispatcherServlet通過(guò)處理器適配器HandlerAdapter調(diào)用處理器Controller。

  5. 執(zhí)行處理器(Controller,也叫后端控制器)

  6. 處理器Controller執(zhí)行完后返回ModelAndView。

  7. 處理器映射器HandlerAdapter將處理器Controller執(zhí)行返回的結(jié)果ModelAndView返回給前端控制器DispatcherServlet。

  8. 前端控制器DispatcherServlet將ModelAnView傳給視圖解析器ViewResolver。

  9. 視圖解析器ViewResolver解析后返回具體的視圖View。

  10. 前端控制器DispatcherServlet對(duì)視圖View進(jìn)行渲染視圖(即:將模型數(shù)據(jù)填充至視圖中)

  11. 前端控制器DispatcherServlet響應(yīng)用戶。

MVC流程中的模塊:

  1. DispatcherServlet:前端控制器(不需要程序員開(kāi)發(fā)) 用戶請(qǐng)求到達(dá)前端控制器,它相當(dāng)于MVC模式中的C(Controller),DispatcherServlet是整個(gè)流程控制的中心,由它調(diào)用其它組件處理用戶的請(qǐng)求,DispatcherServlet的存在降低了組件之間的耦合性。
    作用:作為接受請(qǐng)求,相應(yīng)結(jié)果,相當(dāng)于轉(zhuǎn)發(fā)器,中央處理器,減少其他組件之間的耦合度。

  2. HandlerMapping:處理器映射器(不需要程序員開(kāi)發(fā))
    HandlerMapping負(fù)責(zé)根據(jù)用戶請(qǐng)求找到Handler(即:處理器),SpringMVC提供了不同的映射器實(shí)現(xiàn)實(shí)現(xiàn)不同的映射方式,例如:配置文件方式、實(shí)現(xiàn)接口方式、注解方式等。
    作用:根據(jù)請(qǐng)求的Url 查找Handler

  3. Handler:處理器(需要程序員開(kāi)發(fā))
    Handler是繼DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下,Handler對(duì)具體的用戶請(qǐng)求進(jìn)行處理。 由于Handler設(shè)計(jì)到具體的用戶業(yè)務(wù)請(qǐng)求,所以一般情況需要程序員根據(jù)業(yè)務(wù)需求開(kāi)發(fā)Handler。

  4. HandlerAdapter:處理器適配器 通過(guò)HandlerAdapter對(duì)處理器進(jìn)行執(zhí)行,這是適配器模式的應(yīng)用,通過(guò)擴(kuò)展適配器可以對(duì)更多類型的處理器進(jìn)行執(zhí)行。
    作用:按照特定的規(guī)則(HandlerAdapter要求的規(guī)則)去執(zhí)行Handler

  5. ViewResolver:視圖解析器(不需要程序員開(kāi)發(fā)) ViewResolver負(fù)責(zé)將處理結(jié)果生成View視圖,ViewResolver首先根據(jù)邏輯視圖名解析成物理視圖名,即具體的頁(yè)面地址,再生成View視圖對(duì)象,最后對(duì)View進(jìn)行渲染將處理結(jié)果通過(guò)頁(yè)面的展示給用戶。SpringMVC框架提供了很多View視圖類型,包括:JSTLView、freemarkerView、pdfView等等。
    作用:進(jìn)行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖(view)。

  6. View視圖 (需要程序員開(kāi)發(fā) jsp)
    View是一個(gè)接口,實(shí)現(xiàn)類支持不同的View類型(jsp、freemarker等)一般情況下需要通過(guò)頁(yè)面標(biāo)簽或者頁(yè)面模板技術(shù)將模型數(shù)據(jù)通過(guò)頁(yè)面展示給用戶,需要由程序員根據(jù)業(yè)務(wù)需求開(kāi)發(fā)具體的頁(yè)面。

  7. 以上就是如何快速入門SpringIoC和SpringMVC,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI