1. 程式人生 > >SpringIoC和SpringMVC的快速入門

SpringIoC和SpringMVC的快速入門

更多內容,歡迎關注微信公眾號:全菜工程師小輝~

Spring的優勢?

  1. 降低了元件之間的耦合性 ,實現了軟體各層之間的解耦
  2. 可以使用容易提供的眾多服務,如事務管理,訊息服務等
  3. 容器提供單例模式支援
  4. 容器提供了AOP技術,利用它很容易實現如許可權攔截,執行期監控等功能
  5. Spring的IoC機制降低了業務物件替換的複雜性
  6. 容器提供了眾多的輔助類,能加快應用的開發
  7. Spring對於主流的應用框架提供了整合支援,如Hibernate,JPA,Mybatis等
  8. Spring屬於低侵入式設計,程式碼的汙染極低, 並且獨立於各種應用伺服器
  9. Spring的高度開放性,並不強制應用完全依賴於Spring,開發者可以自由選擇spring的部分或全部。

為什麼本文不講AOP?

IoC和AOP是Spring框架的兩大特性,IoC和MVC的流程密不可分,可以看作是面向物件程式設計的實現;而AOP特性則是面向切面程式設計的體現,也是前者的補充,所以可以拆分開後續講解。

本文對SpringIoC和SpringMVC的流程進行了簡單的講解,更加詳細的過程,歡迎看筆者的程式碼庫,裡面幾乎每行程式碼都做了詳細註釋,一個請求debug跟下來,過程就一目瞭然了。

快戳我,我們去學習~

什麼是SpringIoC?

控制反轉IoC(Inversion of Control),是一種設計思想。沒有IoC的程式中我們使用面向物件程式設計物件的建立與物件間的依賴關係完全硬編碼在程式中,物件的建立由程式自己控制,而使用控制反轉後,將物件的建立轉移給第三方。

IoC是Spring框架的核心內容,使用多種方式完美的實現了IoC,可以使用XML配置,也可以使用註解,新版本的Spring也可以零配置實現IoC。Spring容器在初始化時先讀取配置檔案,根據配置檔案或元資料建立與組織物件存入容器中,程式使用時再從IoC容器中取出需要的物件。

採用XML方式配置Bean的時候,Bean的定義資訊是和實現分離的,而採用註解的方式可以把兩者合為一體,Bean的定義資訊直接以註解的形式定義在實現類中,從而達到了零配置的目的。

SpringIoC的過程?

  1. 基礎包掃描。讀取配置檔案,然後根據配置路徑進行全包掃描,,最後將掃描到的類名加上全限定名之後加入到陣列集合中
  2. 例項化所有帶註解的類。遍歷上一步的陣列集合,判斷類上的註解並例項化該類,以該類的類名為key,例項為value,放入雜湊表中
  3. 依賴注入。遍歷上一步的雜湊表,獲取類上所有Fields,遍歷Fields,判斷Fields上是否為@Autowired型別的註解,如果是的話就把Map中的例項賦值這個field
  4. Url地址和方法對映。遍歷第二步的雜湊表,如果是Controller例項,獲取Methods並遍歷,判斷方法上是否含有@RequestMapping註解,如果含有,則獲取它的值,將@Controller的註解值拼接上@RequestMapping值組成key,當前method作為value,裝入hanlerMap中

  5. 請求反射呼叫。(這一步已經屬於MVC範疇)一個url請求過來,獲取它的地址,拆分,獲取Controller例項,獲取Method例項,反射執行Method

什麼是SpringMVC?

SpringMVC框架是以請求為驅動,圍繞Servlet設計,將請求發給控制器,然後通過模型物件,分派器來展示請求結果檢視。其中核心類是DispatcherServlet,它是一個Servlet,頂層是實現的Servlet介面。

為什麼要用SpringMVC?

框架的作用一直都是用來簡化程式設計的:
servlet只有doGet和doPost,一個servlet類只能處理一個url-pattern。
SpringMVC類裡面可以通過RequestMapping處理很多請求,並且支援Rest風格的請求,如DELETE/PUT等;SpringMVC引數的對映可以直接封裝成實體類。

SpringMVC的流程

流程圖說明:

  1. 使用者傳送請求至 前端控制器DispatcherServlet。
  2. 前端控制器DispatcherServlet收到請求後呼叫處理器對映器HandlerMapping。
  3. 處理器對映器HandlerMapping根據請求的Url找到具體的處理器,生成處理器物件Handler及處理器攔截器HandlerIntercepter(如果有則生成)一併返回給前端控制器DispatcherServlet。
  4. 前端控制器DispatcherServlet通過處理器介面卡HandlerAdapter呼叫處理器Controller。
  5. 執行處理器(Controller,也叫後端控制器)
  6. 處理器Controller執行完後返回ModelAndView。
  7. 處理器對映器HandlerAdapter將處理器Controller執行返回的結果ModelAndView返回給前端控制器DispatcherServlet。
  8. 前端控制器DispatcherServlet將ModelAnView傳給檢視解析器ViewResolver。
  9. 檢視解析器ViewResolver解析後返回具體的檢視View。
  10. 前端控制器DispatcherServlet對檢視View進行渲染檢視(即:將模型資料填充至檢視中)
  11. 前端控制器DispatcherServlet響應使用者。

MVC流程中的模組:

  1. DispatcherServlet:前端控制器(不需要程式設計師開發)
    使用者請求到達前端控制器,它相當於MVC模式中的C(Controller),DispatcherServlet是整個流程控制的中心,由它呼叫其它元件處理使用者的請求,DispatcherServlet的存在降低了元件之間的耦合性。
    作用:作為接受請求,相應結果,相當於轉發器,中央處理器,減少其他元件之間的耦合度。
  2. HandlerMapping:處理器對映器(不需要程式設計師開發)
    HandlerMapping負責根據使用者請求找到Handler(即:處理器),SpringMVC提供了不同的對映器實現實現不同的對映方式,例如:配置檔案方式、實現介面方式、註解方式等。
    作用:根據請求的Url 查詢Handler
  3. Handler:處理器(需要程式設計師開發)
    Handler是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下,Handler對具體的使用者請求進行處理。
    由於Handler設計到具體的使用者業務請求,所以一般情況需要程式設計師根據業務需求開發Handler。
  4. HandlerAdapter:處理器介面卡
    通過HandlerAdapter對處理器進行執行,這是介面卡模式的應用,通過擴充套件介面卡可以對更多型別的處理器進行執行。
    作用:按照特定的規則(HandlerAdapter要求的規則)去執行Handler
  5. ViewResolver:檢視解析器(不需要程式設計師開發)
    ViewResolver負責將處理結果生成View檢視,ViewResolver首先根據邏輯檢視名解析成物理檢視名,即具體的頁面地址,再生成View檢視物件,最後對View進行渲染將處理結果通過頁面的展示給使用者。SpringMVC框架提供了很多View檢視型別,包括:JSTLView、freemarkerView、pdfView等等。
    作用:進行檢視解析,根據邏輯檢視名解析成真正的檢視(view)。
  6. View檢視 (需要程式設計師開發 jsp)
    View是一個介面,實現類支援不同的View型別(jsp、freemarker等)一般情況下需要通過頁面標籤或者頁面模板技術將模型資料通過頁面展示給使用者,需要由程式設計師根據業務需求開發具體的頁面。

相關推薦

SpringIoCSpringMVC快速入門

更多內容,歡迎關注微信公眾號:全菜工程師小輝~ Spring的優勢? 降低了元件之間的耦合性 ,實現了軟體各層之間的解耦 可以使用容易提供的眾多服務,如事務管理,訊息服務等 容器提供單例模式支援 容器提供了AOP技術,利用它很容易實現如許可權攔截,執行期監控等功能 Spring的IoC機制降低了業務物件替換

Expression Blend實例中文教程(12) - 樣式模板快速入門Style,Template

lap gin ger 快速 style 分享 所有 mar 相同屬性 在上一篇,介紹了Visual State Manager視覺狀態管理器,其中涉及到控件的樣式(Style)和模板(Template),本篇將詳細介紹樣式(Style)和模板(Template)在Silv

springmvc快速入門(XML版本)

1)springmvc快速入門(傳統版)    步一:建立springmvc-day01這麼一個web應用    步二:匯入springioc,springweb , springmvc相關的jar包    步三:在/WEB-INF/下建立we

springmvc快速入門(註解版本)

1)springmvc快速入門(傳統版)    步一:建立springmvc-day02這麼一個web應用    步二:匯入springioc,springweb和springmvc相關的jar包 ----------------------------

linux下列出目錄命令vim快速入門

  使用 “ls” 命令來列出目錄內容   相關引數 ls -a  顯示所有檔案 ls -l   顯示詳細資訊 ls -R  遞迴顯示子目錄結構 ls -ld  顯示目錄和連結資訊     通過fil

什麼是SpringMVC?(三)springmvc快速入門(註解版本)

一、springmvc快速入門(傳統版)    步一:建立springmvc-day02這麼一個web應用    步二:匯入springioc,springweb和springmvc相關的jar包 ----------------------------------

[7]深度學習Keras---- 快速入門心得

上個禮拜終於給公司技術達人們分享完了深度學習和Keras,這其中也走過了不少的彎路。比如筆者一上來就開始看Keras,看TenseFlow,看Theano,一下子買了4五本類似的書,結果看了半天,感覺索

伺服器Servlet快速入門

伺服器:裝有伺服器軟體的計算機資料庫伺服器:裝有MySql軟體的計算機Web伺服器:裝有Web伺服器軟體的計算機 Web伺服器作用:接收請求 處理請求 響應請求 常見的JavaEE Web伺服器//Java Oracle WebLogicWebLogic oracle公司

GitGitHub快速入門

con 日誌 51cto -a text .com pro type email Git入門 簡介 Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的分布式版本控制系統。 工具 準備工具 Git下載地址:https://git

SpringMVC系列之SpringMVC快速入門 MVC設計模式介紹+什麼是SpringMVC+ SpringMVC的作用及其基本使用+元件解析+註解解析

## Spring-mvc ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201008203133742.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cH

SpringMVC插件安裝、環境配置及快速入門

應用 pre spring 包含 tro quest patch ava dispatch SpringMVC 是現在廣泛應用的框架結構,我也只是一個初學者,一遍學習一遍梳理整合,如有錯誤,希望大神指點,別誤人。 MVC :Model-View-Control 框架性質的C

Angular2快速入門-3.多個組件(分離新聞列表頁詳細頁)

中新 table ref date 入門 log sta ble row 上篇(Angular2快速入門-2.創建一個新聞列表)已經完成新聞列表的展示,並且點擊新聞列表的時候,下面可以展示出新聞的詳細信息,這節我們把新聞詳細和新聞列表頁面分離出來 新聞詳細單獨一個comp

webpack快速入門——配置文件:服務熱更新

並且 base 復制 暴露 span port 錯誤 tput 自己的 1.在終端安裝 cnpm i webpack-dev-server --save-dev 2.配置好後執行 webpack-dev-server,這時候會報錯 出現錯誤,只需要在pagejson裏

【ASP.NET Core快速入門】(三)準備CentOSNginx環境

正常 b- 進入 運行 ins 輸入 最小 我們 -128 基本軟件 VMware虛擬機 centos:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso

H5小程序直播開發 零距離快速入門

以及 重要 掌握 經驗 導致 技巧 地址 很大的 net 第1章 課程介紹 對於課程整體以及直播行業的現狀進行介紹 第2章 直播工作原理 所謂知其然也要知其所以然,只會用別人總結好的東西很難有質的進步,只有深諳背後的工作原理才能進一步吃透到進階。本章從直播協議入手到工作原理

JQuery快速入門-操作元素的屬性樣式

dcl 顯示 實現 節點 ali 文本 屬性。 另一個 增加 我們在學習JavaScript時,詳細介紹了DOM對象。從DOM樹可以得知,對DOM的操作,主要包括:元素的屬性、內容、值、CSS。 一、元素屬性的操作 在 jQuery 中,可以對元素的屬性執行獲取、設置、

web3j開發以太坊智能合約快速入門(特別適合javaandroid開發者)

latest struct name admin 套接字 信息 mes add decimal web3j簡介 web3j是一個輕量級、高度模塊化、響應式、類型安全的Java和Android類庫提供豐富API,用於處理以太坊智能合約及與以太坊網絡上的客戶端(節點)進行集成。

Expression Blend實例中文教程(6) - 項目控件用戶交互控件快速入門

ima 生成 eight blank TreeView 效果 ring mage col 前文我們曾經描述過,微軟把Silverlight控件大致分為三類: 第一類: Layout Controls(布局控件) 第二類: Item Controls (項目控件) 第三類:

python3爬蟲-快速入門-爬取圖片標題

瀏覽器 ebr tle path requests itl edi 大致 應用 直接上代碼,先來個爬取豆瓣圖片的,大致思路就是發送請求-得到響應數據-儲存數據,原理的話可以先看看這個 https://www.cnblogs.com/sss4/p/7809821.html

C++快速入門---cincout輸入的一些方法(2)

C++快速入門---cin輸入的一些方法(2)   注意: cin.ignore():忽略前7個字元 cin.getline():接收一個字串 cin.get():獲取一個字元 cin.peek():提取一個字元,不會改變輸入流裡面的資料 cin.gcount(