Struts2之攔截器原理分析及使用-中

一、學習案例:關於攔截器的瞭解,我們肯定不在單純地編碼。我會帶大家通過研讀源碼瞭解攔截器的實現方式,以及學習struts2的編碼方式。

 

二、案例分析:

a)適配器的實現首先會實現Interceptor接口,而在實現類中,我們會實現三個方法:init(),destroy(),intercept()。而前兩個對於我們來講並不需要。當然struts2也採用了適配器模式,從而讓實現類代碼更加清晰,容易辨別。在此,我們會通過繼承AbstractInterceptor抽象類替換Interceptor接口,由此,我們只需重寫intercept()即可。通過查看AbstractInterceptor源碼,我們可以發現它同樣實現了Interceptor接口,所以以後再實現攔截器只需繼承AbstractInterceptor即可。

 

b)ActionInvocation類可以講是攔截器的核心。

通過輸出invocation.getAction().getClass(),我們可以發現,兩個攔截器都是關聯的同一個Action

 

c)攔截器攔截的是什麼?精確的說法應該是攔截器攔截的是目標actionexecute()方法。而對於自定義方法的攔截,我們需要:方法過濾攔截器(MethodFilterInterceptor)。

 

d)查看源碼時,我們會看到一個方法:TextParseUtil.CommaDelimitedStringToSet(...);這個方法是對配置文件中includeMethodexcludeMethod中的字符串進行截取,反過來理解就是,我們在配置文件中方法分隔要以逗號分隔,當然是英文的逗號。

 

e)通過查看文檔,或者查看源碼我們可以發現MethodFilterInterceptor中同樣存在intercept(),但是我們在實現類中並不會實現它,而是doIntercept(),而它在此處的作用,通過分析源碼,我們可以知道它是判斷配置文件中的方法是否需要攔截,配置了此方法就進行攔截,不配置,攔截p啊。呵呵。

 

 

 

 

三、經驗之談:

a)在這裏要提一下設計模式。設計模式是對一些特定場景實現代碼的設計經驗總結。在Java中有大概有23種吧,當然不是說讓大家都熟練掌握,說實話,我現在也就瞭解那麼幾種,實際應用也沒怎麼使過。大家只需簡單瞭解下就行。畢竟對自身編碼會有好處的。

b)我們只要理解過濾器就很容易理解攔截器,無論是設計原理、設計模式還是實現方式上兩者都是一樣的,區別在於過濾器可以過濾一切東西,攔截器只能攔截action,因爲我們只能在action上配置攔截器。

c)當我們編寫代碼時,要養成寫註釋的習慣。這個很重要,不只是爲了讓我們自己可以更好的查看,同樣更方便他們對於自己所編寫的代碼理解,這在多人協作開發中尤爲重要。你可以想想,當你進公司後,如果公司讓你維護一個系統,如果系統代碼連個註釋都沒有,你什麼想法,或者你會忍不住走人,呵呵,開玩笑,只是讓大家知道,養成寫註釋的習慣有多麼重要。同時,寫註釋還有另一個好處,就是生成文檔。關於生成文檔的方式,及原理,大家可以問問度娘,很簡單的,在此我就不再單開博文講解了。

 

四、參考項目:因爲我們主要是對源碼分析,而項目只是讓大家對流程瞭解和掌握。這一章,我們就不提供項目演示了,其實也沒什麼可演示的,大家多看看源碼,分析下AbstractInterceptorMethodFilterInterceptor兩個接口即可。

 

五、每日一樂:

非誠勿擾女嘉賓根本不算什麼,要知道宿管阿姨可以滅一整棟樓男生的燈!

 

 

最終解釋權歸愛尚合夥人所有,轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章