欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 婷婷综合影院 | 亚洲免费三区 | 99久久免费视频在线观看 | 一区二区三区在线 | 日本 | 影音先锋亚洲资源 | 免费观看性欧美大片无片 | 性色av一区二区三区四区 | 日本高清视频www夜色资源网 | 特黄aaaaa日本大片免费看 | 一区二区三区视频 | 日韩国产无矿砖一线二线图 | 草久在线观看视频 | 色婷婷狠狠 | 国产在亚洲线视频观看 | 天天骑天天干 | 另类视频综合 | 男女配种超爽免费视频 | 日本一区二区三区久久久 | 精品国产三级 | 自拍 第一页 | 在线视频不卡国产在线视频不卡 | 91精品国产91久久久 | 欧美三级在线播放 | 性视频久久 | 成人精品国产 | 欧美一区二区三区 | 午夜影院福利社 | 手机在线观看你懂得 | 久久伊人在 | 久久在视频 | 91精品国产欧美一区二区 | 日韩在线小视频 | 精品免费久久久久久成人影院 | 久久视频免费 | 国产视频高清在线 | 亚洲日本高清成人aⅴ片 | 一级毛片aaaaaa视频免费看 | 男女配种超爽免费视频 | 久草在线网址 | 亚洲一区播放 | 久久亚洲精品国产精品黑人 |