日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

SpringIoC和SpringMVC的快速入门

發(fā)布時(shí)間:2024/3/26 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringIoC和SpringMVC的快速入门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

  • 降低了組件之間的耦合性 ,實(shí)現(xiàn)了軟件各層之間的解耦
  • 可以使用容易提供的眾多服務(wù),如事務(wù)管理,消息服務(wù)等
  • 容器提供單例模式支持
  • 容器提供了AOP技術(shù),利用它很容易實(shí)現(xiàn)如權(quán)限攔截,運(yùn)行期監(jiān)控等功能
  • Spring的IoC機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性
  • 容器提供了眾多的輔助類,能加快應(yīng)用的開(kāi)發(fā)
  • Spring對(duì)于主流的應(yīng)用框架提供了集成支持,如Hibernate,JPA,Mybatis等
  • Spring屬于低侵入式設(shè)計(jì),代碼的污染極低, 并且獨(dú)立于各種應(yīng)用服務(wù)器
  • 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)移給第三方。

    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ò)程?

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

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

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

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

  • 請(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的流程

    流程圖說(shuō)明:

  • 用戶發(fā)送請(qǐng)求至 前端控制器DispatcherServlet。
  • 前端控制器DispatcherServlet收到請(qǐng)求后調(diào)用處理器映射器HandlerMapping。
  • 處理器映射器HandlerMapping根據(jù)請(qǐng)求的Url找到具體的處理器,生成處理器對(duì)象Handler及處理器攔截器HandlerIntercepter(如果有則生成)一并返回給前端控制器DispatcherServlet。
  • 前端控制器DispatcherServlet通過(guò)處理器適配器HandlerAdapter調(diào)用處理器Controller。
  • 執(zhí)行處理器(Controller,也叫后端控制器)
  • 處理器Controller執(zhí)行完后返回ModelAndView。
  • 處理器映射器HandlerAdapter將處理器Controller執(zhí)行返回的結(jié)果ModelAndView返回給前端控制器DispatcherServlet。
  • 前端控制器DispatcherServlet將ModelAnView傳給視圖解析器ViewResolver。
  • 視圖解析器ViewResolver解析后返回具體的視圖View。
  • 前端控制器DispatcherServlet對(duì)視圖View進(jìn)行渲染視圖(即:將模型數(shù)據(jù)填充至視圖中)
  • 前端控制器DispatcherServlet響應(yīng)用戶。
  • MVC流程中的模塊:

  • 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ā)器,中央處理器,減少其他組件之間的耦合度。
  • 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
  • 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。
  • HandlerAdapter:處理器適配器
    通過(guò)HandlerAdapter對(duì)處理器進(jìn)行執(zhí)行,這是適配器模式的應(yīng)用,通過(guò)擴(kuò)展適配器可以對(duì)更多類型的處理器進(jìn)行執(zhí)行。
    作用:按照特定的規(guī)則(HandlerAdapter要求的規(guī)則)去執(zhí)行Handler
  • 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)。
  • 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è)面。
  • 總結(jié)

    以上是生活随笔為你收集整理的SpringIoC和SpringMVC的快速入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。