的作用,配置Springmvc中的介面卡和對映器

2021-08-06 06:15:26 字數 4440 閱讀 1525

通常如果我們希望通過註解的方式來進行spring mvc開發,我們都會在***-servlet.xml中加入標籤來告訴spring我們的目的。但是我們為什麼這麼做呢?這個標籤是什麼意思呢?它做了什麼呢?

同樣為了弄清楚這些問題, 像標籤一樣,我們先找到它的解析類。第一篇文章中說過了,所有的自定義命名空間(像mvc,context等)下的標籤解析都是由beandefinitionparser介面的子類來完成的。參看第一篇文章中的

我們看到有多個annotationdrivenbeandefinitionparser,他們是用來處理不同命名空間下的標籤的,我們今天研究的是標籤,所以我們找到對應的實現類是org.springframework.web.servlet.config.annotationdrivenbeandefinitionparser。

通過閱讀類注釋文件,我們發現這個類主要是用來向工廠中註冊了

上面幾個bean例項。這幾個類都是用來做什麼的呢?

中間三個是用來處理請求的。具體點說就是確定呼叫哪個controller的哪個方法來處理當前請求。第乙個處理@controller註解的處理器,支援自定義方法引數和返回值(很酷)。第二個是處理繼承httprequesthandler的處理器。第三個處理繼承自controller介面的處理器。

後面三個是用來處理異常的解析器。

光說無憑據,我們直接看**:

public beandefinition parse(element element, parsercontext parsercontext) 

if (argumentresolvers != null) 

if (returnvaluehandlers != null) 

if (asynctimeout != null) 

if (asyncexecutor != null) 

handleradapterdef.getpropertyvalues().add("callableinterceptors", callableinterceptors);

handleradapterdef.getpropertyvalues().add("deferredresultinterceptors", deferredresultinterceptors);

string handleradaptername = parsercontext.getreadercontext().registerwithgeneratedname(handleradapterdef);

//異常處理解析器

rootbeandefinition exceptionhandlerexceptionresolver = new rootbeandefinition(exceptionhandlerexceptionresolver.class);

exceptionhandlerexceptionresolver.setsource(source);

exceptionhandlerexceptionresolver.setrole(beandefinition.role_infrastructure);

exceptionhandlerexceptionresolver.getpropertyvalues().add("contentnegotiationmanager", contentnegotiationmanager);

exceptionhandlerexceptionresolver.getpropertyvalues().add("messageconverters", messageconverters);

exceptionhandlerexceptionresolver.getpropertyvalues().add("order", 0);

string methodexceptionresolvername =

parsercontext.getreadercontext().registerwithgeneratedname(exceptionhandlerexceptionresolver);

//異常處理解析器

rootbeandefinition responsestatu***ceptionresolver = new rootbeandefinition(responsestatu***ceptionresolver.class);

responsestatu***ceptionresolver.setsource(source);

responsestatu***ceptionresolver.setrole(beandefinition.role_infrastructure);

responsestatu***ceptionresolver.getpropertyvalues().add("order", 1);

string responsestatu***ceptionresolvername =

parsercontext.getreadercontext().registerwithgeneratedname(responsestatu***ceptionresolver);

//異常處理解析器

rootbeandefinition defaultexceptionresolver = new rootbeandefinition(defaulthandlerexceptionresolver.class);

defaultexceptionresolver.setsource(source);

defaultexceptionresolver.setrole(beandefinition.role_infrastructure);

defaultexceptionresolver.getpropertyvalues().add("order", 2);

string defaultexceptionresolvername =

parsercontext.getreadercontext().registerwithgeneratedname(defaultexceptionresolver);

parsercontext.registercomponent(new beancomponentdefinition(handleradapterdef, handleradaptername));

parsercontext.registercomponent(new beancomponentdefinition(exceptionhandlerexceptionresolver, methodexceptionresolvername));

parsercontext.registercomponent(new beancomponentdefinition(responsestatu***ceptionresolver, responsestatu***ceptionresolvername));

parsercontext.registercomponent(new beancomponentdefinition(defaultexceptionresolver, defaultexceptionresolvername));

mvcnamespaceutils.registerdefaultcomponents(parsercontext, source);

parsercontext.popandregistercontainingcomponent();

return

null;

}//在這啊。

public

static

void registerdefaultcomponents(parsercontext parsercontext, object source) 

略長,但很容易看明白的**。看注釋我們發現,它的確註冊了上面說的那幾個類。

我們知道了它們自動為我們註冊了這麼多的bean,那這些bean是做什麼的呢?

第二個是handleradapter的實現類,它是處理請求的介面卡,說白了,就是確定呼叫哪個類的哪個方法,並且構造方法引數,返回值。(後面文章也會陸續詳細介紹的)

那麼它跟有什麼區別呢?其實想上篇文章中介紹的,標籤是告訴spring 來掃瞄指定包下的類,並註冊被@component,@controller,@service,@repository等註解標記的元件。

而是告知spring,我們啟用註解驅動。然後spring會自動為我們註冊上面說到的幾個bean到工廠中,來處理我們的請求。

springmvc中的靜態資源對映配置

web.xml配置 id taotao version 2.5 taotao sso index.html index.htm index.jsp default.html default.htm default.jsp contextconfiglocation org.springframewo...

springMVC中快速配置shiro

1.在web.xml檔案中配置shiro的過濾器,以攔截專案內的訪問 shirofilter org.springframework.web.filter.delegatingfilterproxy targetfilterlifecycle true shirofilter 2.在spring 的...

springMVC的檔案配置

之前有學習過springmvc框架,只知道他和struts框架一樣都是mvc框架,今天在再學習springmvc的時候學習到一些知識。在此分享出來,供自己記住。首先要使用springmvc框架,先導入其jar包,然後就是配置檔案 下面我來說一下springmvc的配置檔案 這裡主要牽扯2個重要的配置...