javascript
关于Spring 中的PortletModeHandlerMapping
在Spring Portlet MVC中,我們可以用PortletModeHandlerMapping來將Portlet模式綁定到對應的Handler上,并且再這里可以聲明攔截器,示例代碼如下:
我們結合框架代碼來具體看下這個類是如何工作的。
從最基本的看,它是事先了spring mvc portlet的HandlerMapping 接口,這個接口主要定義了getHandler()方法:
?
這個接口的getHandler()方法可以返回對于某種PortletRequest(RenderRequest,ActionRequest,ResourceRequest)的對應的處理方法,并且返回一個HandlerExecutionChain對象,我們可以根據自己的需要注冊多個Handler(對應不同類型的PortletRequest)
而在PortletModeHandlerMapping的父類AbstractHandlerMapping中給出了getHandler()的默認實現:
?從這里可以看出它會先調用getHandlerInternal(request), 這個方法是定義在AbstractMapBaseHandlerMapping類中,它用來從handlerMap中提取key(比如"view")等,然后,獲取Value(Handler的類名) 。
然后在第10-14行,通過這個Handler的名字,來在Spring Application中建立起對應這個handler對應的bean,并且將控制權返回給執行Handler的執行鏈。
?
而我們研究的PortletModelHandlerMapping類則主要用于從xml文件中讀取參數,設置攔截器等等。在PortletModeHandlerMapping對應的bean,(也就是我們定義在xml文件的Spring Application Context上下文定義的portletModeHandlerMapping)初始化時候,它會調用PortletModeHandlerMapping的initApplicationContext()方法,如下:
它回去調用父類的initApplicationContext()然后調用registerHandlerByMode(),我們分別看:
?
對于initApplicationContext(),它會初始化攔截器的設定,也就是對應我們一開始的xml定義中的interceptors屬性,它會分別初始化并且使用這些攔截器:
?
而對于registerHandlerByMode(this.portletModeMap),則會先讀取xml bean定義文件中的portletModeMap屬性,然后對于其中定義的每一對<map></map>元素,來根據其中的PortletMode來注冊/實例化對應的Handler ,這個我們已經在上文中討論過了。
?
現在我們對這個過程已經一目了然了
?
?
?
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
轉載于:https://blog.51cto.com/supercharles888/1159603
總結
以上是生活随笔為你收集整理的关于Spring 中的PortletModeHandlerMapping的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Drupal 7中 page.tpl.p
- 下一篇: gradle idea java ssm