欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Struts2攔截器執行順序

系統 1798 0

在之前的文章中,我們已經涉及到了攔截器(Interceptor)的概念。


接下來,我們將重點討論一下Struts2中的攔截器的內部結構和執行順序,并結合源碼進行分析。

Interceptor結構讓我們再來回顧一下之前我們曾經用過的一張Action LifeCycle的圖:

?? 我在這里需要指出的是一個很重要的方法invocation.invoke()。這是ActionInvocation中的方法,而ActionInvocation是Action調度者,所以這個方法具備以下2層含義:

?? 1. 如果攔截器堆棧中還有其他的Interceptor,那么invocation.invoke()將調用堆棧中下一個Interceptor的執行。

?? 2. 如果攔截器堆棧中只有Action了,那么invocation.invoke()將調用Action執行。

所以,我們可以發現,invocation.invoke()這個方法其實是整個攔截器框架的實現核心。基于這樣的實現機制,我們還可以得到下面2個非常重要的推論:

?? 1. 如果在攔截器中,我們不使用invocation.invoke()來完成堆棧中下一個元素的調用,而是直接返回一個字符串作為執行結果,那么整個執行將被中止。

?? 2. 我們可以以invocation.invoke()為界,將攔截器中的代碼分成2個部分,在invocation.invoke()之前的代碼,將會在Action之前被依次執行,而在invocation.invoke()之后的代碼,將會在Action之后被逆序執行。

由此,我們就可以通過invocation.invoke()作為Action代碼真正的攔截點,從而實現AOP。

Interceptor攔截類型

?? 從上面的分析,我們知道,整個攔截器的核心部分是invocation.invoke()這個函數的調用位置。事實上,我們也正式根據這句代碼的調用位置,來進行攔截類型的區分的。在Struts2中,Interceptor的攔截類型,分成以下三類:

?? 1. before

before攔截,是指在攔截器中定義的代碼,它們存在于invocation.invoke()代碼執行之前。這些代碼,將依照攔截器定義的順序,順序執行。

?? 2. after

after攔截,是指在攔截器中定義的代碼,它們存在于invocation.invoke()代碼執行之后。這些代碼,將一招攔截器定義的順序,逆序執行。

Interceptor執行順序

??? Interceptor的執行順序或許是我們在整個過程中最最關心的部分。根據上面所提到的概念,我們實際上已經能夠大致明白了Interceptor的執行機理。我們來看看Struts2的Reference對Interceptor執行順序的一個形象的例子。

如果我們有一個interceptor-stack的定義如下:

Xml代碼?
<interceptor-stack name="xaStack">??
? <interceptor-ref name="thisWillRunFirstInterceptor"/>??
? <interceptor-ref name="thisWillRunNextInterceptor"/>??
? <interceptor-ref name="followedByThisInterceptor"/>??
? <interceptor-ref name="thisWillRunLastInterceptor"/>??
</interceptor-stack>??


那么,整個執行的順序大概像這樣:


Struts2攔截器執行順序


?? 在這里,我稍微改了一下Struts2的Reference中的執行順序示例,使得整個執行順序更加能夠被理解。我們可以看到,遞歸調用保證了各種各樣的攔截類型的執行能夠井井有條。

請注意在這里,每個攔截器中的代碼的執行順序,在Action之前,攔截器的執行順序與堆棧中定義的一致;而在Action和Result之后,攔截器的執行順序與堆棧中定義的順序相反。

Struts2攔截器執行順序


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕在线观看视频一区 | 欧美日韩精品一区二区三区 | 欧美激情欧美激情在线五月 | 免费在线观看的毛片 | 一级亚洲 | 天天碰天天 | 成人免费一区二区三区视频网站 | 五月婷婷狠狠干 | 国产精品久久久久免费 | 国产一级一级一级成人毛片 | 国产亚洲精品久久久久久老妇 | 国产欧美性综合视频性刺激 | 91伦理片 | 久久99色| 日夜啪| 日本精品久久久久久久久免费 | 亚洲国产视频一区 | 91高清在线成人免费观看 | wwwxxx日本在线观看 | 久久福利剧场 | 色综合区| 天天操网| 99av.com| 亚洲国产91 | 午夜精品久久久久久99热软件 | 欧美黑人玩白人巨大极品 | 国产精品系列在线 | 国产一二三区精品 | 99欧美在线 | 免费福利在线观看 | 精品国偷自产在线 | 欧美激情xxxx| 97国产精品视频人人做人人爱 | 欧美日韩国产在线播放 | 黄色免费网站在线观看 | 人妻体内射精一区二区三四 | 成人1234| 九九视频在线看精品 | 亚洲欧美日韩综合一区久久 | 亚洲v日韩v综合v精品v | 成人不卡视频 |