亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Struts2攔截器執(zhí)行順序

系統(tǒng) 1946 0

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


接下來(lái),我們將重點(diǎn)討論一下Struts2中的攔截器的內(nèi)部結(jié)構(gòu)和執(zhí)行順序,并結(jié)合源碼進(jìn)行分析。

Interceptor結(jié)構(gòu)讓我們?cè)賮?lái)回顧一下之前我們?cè)?jīng)用過(guò)的一張Action LifeCycle的圖:

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

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

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

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

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

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

由此,我們就可以通過(guò)invocation.invoke()作為Action代碼真正的攔截點(diǎn),從而實(shí)現(xiàn)AOP。

Interceptor攔截類(lèi)型

?? 從上面的分析,我們知道,整個(gè)攔截器的核心部分是invocation.invoke()這個(gè)函數(shù)的調(diào)用位置。事實(shí)上,我們也正式根據(jù)這句代碼的調(diào)用位置,來(lái)進(jìn)行攔截類(lèi)型的區(qū)分的。在Struts2中,Interceptor的攔截類(lèi)型,分成以下三類(lèi):

?? 1. before

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

?? 2. after

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

Interceptor執(zhí)行順序

??? Interceptor的執(zhí)行順序或許是我們?cè)谡麄€(gè)過(guò)程中最最關(guān)心的部分。根據(jù)上面所提到的概念,我們實(shí)際上已經(jīng)能夠大致明白了Interceptor的執(zhí)行機(jī)理。我們來(lái)看看Struts2的Reference對(duì)Interceptor執(zhí)行順序的一個(gè)形象的例子。

如果我們有一個(gè)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>??


那么,整個(gè)執(zhí)行的順序大概像這樣:


Struts2攔截器執(zhí)行順序


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

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

Struts2攔截器執(zhí)行順序


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 五月婷婷激情综合 | 国产成人成人一区二区 | 亚洲欧美激情精品一区二区 | 中文字幕亚洲精品第一区 | 九九99久久精品在免费线bt | 国产做国产爱免费视频 | 杨幂国产精品福利在线观看 | 夜夜爽毛片 | 青青青视频精品中文字幕 | 国产香蕉网 | 男女性高爱麻豆 | 成人久久精品 | 久久久精品久久久久久 | 激情五月五月婷婷 | 一区欧美 | 狠狠干人人插 | 免费鲁丝片一级观看 | 国产91小视频在线观看 | 久久这里只精品热免费99 | 欧美区一区二区三 | 四虎影院观看 | 99热网站| 欧美jizzhd精品欧美另类 | 久久毛片免费看一区二区三区 | 老司机成人午夜精品福利视频 | 二级毛片免费观看全程 | 中文字幕在线观看日韩 | 欧美一区二区高清 | 国产精品视频一区二区猎奇 | 四虎在线永久免费视频网站 | 一级片免费在线 | 国产综合在线观看 | 日韩视频一区二区在线观看 | 国产1区2区三区不卡 | 国产日产欧美a级毛片 | 在线观看深夜观看网站免费 | 日韩精品午夜视频一区二区三区 | 越南黄色录像 | 网站一级片| 国产精品美女 | 婷婷六月天激情 |