2.handleradapter
我們最原始的servlet處理方式可以知道,當乙個請求到達的時候,是封裝成request傳送到servlet的doservice(httpservletrequest,httpservletresponse)形式的,所以,要從傳統的servlet模式轉到spring mvc,這裡就需要乙個介面卡,將對應的url,對映到對應的handler上面
3.handlerexceptionresolver
從名字上看,這個是處理handler異常的元件,此元件的作用是根據異常設定modelandview,之後交給渲染方法進行渲染,渲染方法將modelandview渲染成頁面,返回給客戶端。
4.viewresolver
視**析器,功能是將string型別的檢視名解析為view型別的檢視,只有乙個resolveviewname()方法。view用來渲染頁面,也就是將程式返回的引數和資料填入模板中。
5.requesttoviewnametranslator
作用是從請求中獲取viewname,因為viewresolver根據viewname查詢view,如果handler處理完之後,沒有設定view,也沒有viewname,這個時候就需要這個元件中查詢viewname。
6.localeresolver
viewresolver元件的resolveviewname()方法需要兩個引數,乙個是viewname,乙個就是locale,locale的獲得就是該元件需要提供的,它從請求中解析出locale,表示乙個區域。中國locale就是zh-cn。
7.themeresolver
8.multipartresolver
用於處理上傳請求,通過將普通的請求包裝成multiparthttpservletrequest來實現,它可以通過getfile()直接獲取檔案。簡單來說就是封裝請求,使其有檔案上傳的功能
9.flashmapmanager
從名字可以知道,flashmap的管理者,flashmap用於重定向時的引數傳遞,
繼續回到dispatcher類中的initstrategies()方法:
1.initmultiparresolver()
多檔案上傳的元件,
try
我們看一下這些常量字段:
很明顯,這下面9個字段,正好對應9個元件,同時這9個字串作為bean的名字,自然有物件的class物件,他們的具體實現儲存在了乙個dispatcher.properties檔案中。他們都會在spring mvc容器重新整理的時候進行例項化,存放到容器中。
public static final string multipart_resolver_bean_name = "multipartresolver";
public static final string locale_resolver_bean_name = "localeresolver";
public static final string theme_resolver_bean_name = "themeresolver";
public static final string handler_adapter_bean_name = "handleradapter";
public static final string handler_exception_resolver_bean_name = "handlerexceptionresolver";
public static final string request_to_view_name_translator_bean_name = "viewnametranslator";
public static final string view_resolver_bean_name = "viewresolver";
public static final string flash_map_manager_bean_name = "flashmapmanager";
第乙個元件初始化比較簡單,就是從容器中獲取到物件的bean,然後注入到servlet中,等待後面處理請求的時候進行呼叫。
2.initlocalresolver()
初始化本地語言環境,它的操作和上面的多檔案上傳元件相同
try
3.initthemeresolver()
同樣是getbean()操作
try
處理器很重要,所以它的初始化也稍顯不同,注意看下面的英文註解
if (!matchingbeans.isempty())
}try
}} string key = strategyinte***ce.getname();
string value = defaultstrategies.getproperty(key); //從web.xml中獲取
if (value != null) ...
}return strategies;
}else }
5.inithandleradapters()
this.handleradapters = null;
if (this.detectallhandleradapters)
}else
if (this.handleradapters == null) }
後面的元件初始化內容也差不多,這裡就不展開敘述了
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...
MVC九大元件
元件作用 1multipartresolver 多檔案上傳的元件 2localeresolver 本地語言環境 3themeresolver 主題模板處理器 4儲存url對映關係 5handleradapter動態引數介面卡 6handlerexceptionresolver 異常 7request...
spring原始碼解析
spring源 解析 一 ioc容器 spring源 解析 二 ioc容器在web容器中的啟動 spring源 解析 三 spring jdbc spring源 解析 四 spring mvc spring源 解析 五 spring aop獲取proxy spring源 解析 六 spring宣告式...