<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    邊城愚人

    如果我不在邊城,我一定是在前往邊城的路上。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      31 隨筆 :: 0 文章 :: 96 評論 :: 0 Trackbacks

    ??? ??? call execution 的指示符分別為 call Method-Signature )、 execution Method-Signature ),匹配方法簽名的方法或構造函數的執行。 對于 call 來說,調用的連接點位于方法調用點的調用代碼處;對于 execution 來說,執行的連接點位于方法執行的位置。也就是說, call execution 的重要區別在于它們傳遞了哪些類型給 AspectJ 編譯器以用來與 aspect 進行鏈接。

    ??? ??? 通常,我們在使用 call execution 時,從效果上來看并不會覺察出二者的區別。下面給出一個例子說明 call execution 的運行時機及區別。

    ??? ?

    public?class?A??{
    ????
    public?void?foo(){
    ????????System.out.println(
    "A.foo()");
    ????}
    }

    public?class?Main?{
    ????
    public?void?callFoo(A?a){
    ????????a.foo();
    ????}
    ????
    public?static?void?main(String[]?args)?{????
    ????????Main?m?
    =?new?Main();
    ????????m.callFoo(
    new?A());
    ????}
    }

    ??? ??? 1 )現在我看一下下面使用 call 的切面:

    ? ????????????????????? aspectj.png

    ???

    ??? ??? ?? 該切面定義了一個切入點callA(Object o,Object t),其中this(o)表示將匹配的連接點的對象賦給otarget(t)表示將匹配的連接點的目標對象賦給t。輸出結果為:


    ??? ??? ?? aspectj-3.png

    ??? ?? ?

    ??? ??? 輸出表明,this的類(調用類)為Maintarget的類(目標類)為A我們再看一下Main類:


    ??? ?? aspectj-2.png


    ??? ??? 在AJDT下,可以看到,call切入點匹配的位置在調用類(Main)的方法void callFoo(A a)中,而不是在目標類A中。

    ??? ??? 2)再來看一下execution的例子:


    ??? ?? aspectj-4e.png


    ?? ?? aspectj-f.png


    ??? ??? 在這個方面中,切入點沒有使用thistarget,而是在before通知中使用了AspectJAPI達到同樣的效果。可以看到,切入點executionA()匹配的連接點的位置在Afoo()方法,這和上面的call匹配的連接點的位置是不同的。

    ??? ?? aspectj-7t.png

    ?? ?

    ??? ??

    ??? ??? 從輸出可以看到,在execution中,thistarget指向同一個類。在call中,thistarget不是指向同一個類

    ??? ??? executioncall還有一點很重要的區別。對于繼承類來說,如果它沒有覆蓋父類的方法,那么execution不會匹配子類中沒有覆蓋父類的方法。比如說我們有一個類B繼承于A,但沒有覆蓋A類的foo(),那么對于B的實例的foo()方法,execution(* B.foo())將不會被匹配。

    ??? ??? 做個總結,如果想跟蹤連接點的內部代碼運行情況可以考慮使用execution,但如果你只關心連接點的簽名(比如你使用第三方庫或是標準API),則使用call

    ??? ??? 注:該文參考了《Eclipse AspectJ》和《AspectJ cookbook》。


    posted on 2007-07-12 09:50 kafka0102 閱讀(4163) 評論(6)  編輯  收藏 所屬分類: AOP

    評論

    # re: AspectJ學習(3)使用切入點 call和execution 2008-04-27 10:53 wxyhibernate
    謝謝
      回復  更多評論
      

    # re: AspectJ學習(3)使用切入點 call和execution 2008-08-16 11:05 xiaozhang206
    非常感謝,高手!  回復  更多評論
      

    # re: AspectJ學習(3)使用切入點 call和execution[未登錄] 2008-10-24 12:48 Java愛好者
    好文章,自己正在學習AspectJ,不過全是英文版!覺得有點迷惑,看了你的文章,有些東西,豁然開朗!  回復  更多評論
      

    # re: AspectJ學習(3)使用切入點 call和execution 2009-07-08 14:31 sheng
    謝謝  回復  更多評論
      

    # re: AspectJ學習(3)使用切入點 call和execution 2009-08-26 15:47 eva
    請問,call 可以攔截到 間接調用的方法嗎?
    例如 一個類里的A方法調用B 方法,可以攔截到B嗎?
    我現在遇到的問題是不知道怎么攔截 間接方法調用  回復  更多評論
      

    # re: AspectJ學習(3)使用切入點 call和execution 2010-11-17 17:15 可可
    相當好的文章,博主要是把這個系列寫下去,必然是AspectJ的引路人啊

    謝謝博主  回復  更多評論
      

    主站蜘蛛池模板: 光棍天堂免费手机观看在线观看| 亚洲精品国产第一综合99久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国产gav成人免费播放视频| 亚洲午夜精品一区二区公牛电影院 | 色吊丝免费观看网站| 宅男666在线永久免费观看| 亚洲GV天堂GV无码男同 | 国产精品色午夜免费视频| 亚洲色欲啪啪久久WWW综合网| 曰曰鲁夜夜免费播放视频| 亚洲www在线观看| 妞干网手机免费视频| 亚洲高清乱码午夜电影网| 免费人成年轻人电影| 久久精品成人免费观看97| 亚洲国产精品无码久久久蜜芽 | 丁香花免费完整高清观看 | 亚洲一本到无码av中文字幕| 在线观看免费成人| 蜜臀亚洲AV无码精品国产午夜.| 天堂亚洲免费视频| 成人A片产无码免费视频在线观看| 亚洲国产精品无码久久久秋霞2| 亚洲精品视频免费看| 亚洲熟妇AV一区二区三区宅男| 免费国产高清视频| 99精品视频在线观看免费| 久久久久亚洲av无码专区导航| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 亚洲精品天堂在线观看| 人禽杂交18禁网站免费| 美女羞羞视频免费网站| 亚洲国产另类久久久精品小说| 最近免费2019中文字幕大全| 亚洲码和欧洲码一码二码三码 | 91成年人免费视频| 免费无码国产在线观国内自拍中文字幕| 亚洲人成网站在线播放vr| 亚洲免费视频观看| 日韩一级片免费观看|