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

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

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

    邊城愚人

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      31 隨筆 :: 0 文章 :: 96 評(píng)論 :: 0 Trackbacks

    ??? ??? target 切入點(diǎn)格式如下: target ([ Type Identifier ])。 Type 指示對(duì)連接點(diǎn)處的對(duì)象類型提供一個(gè)靜態(tài)編譯時(shí)評(píng)估,并采用完全限定類名的形式(也就是說, Type 不能是使用通配符的類型聲明模式)。 Identifier 提供了一種方法,可通過它來評(píng)估連節(jié)點(diǎn)處的運(yùn)行時(shí)對(duì)象的實(shí)際類型,而不僅僅是靜態(tài)類型。 Identifier 在運(yùn)行時(shí)動(dòng)態(tài)地賦予合適的對(duì)象。

    ??? ??? 下面通過例子說明一下 target 的使用:

    public interface Animal {

    ??? void speak();

    }


    public class Cat implements Animal{

    ??? public void speak() {

    ??? ??? System. out .println( " 喵喵 " );

    ??? }

    }


    public class Dog implements Animal{

    ??? public void speak() {

    ??? ??? System. out .println( " 汪汪 " );

    ??? }

    }

    public class Zoo {

    ??? private List<Animal> animals = new ArrayList<Animal>();

    ??? public void addAnimal(Animal a){

    ??? ??? animals .add(a);

    ??? }

    ??? public void speak(){

    ??? ??? for (Animal a : animals ){

    ??? ??? ??? ??? a.speak();

    ??? ??? }

    ??? }

    }

    ???

    定義一個(gè)切入點(diǎn)如下:

    public pointcut speakCallOne():

    ??? call (* speak()) && target (Animal);

    ??? ??? 雖然 pointcut speakCallOne() 中的 call (* speak()) 匹配所有類的 speak() 方法(這里匹配 Cat Dog Zoo ),但 target (Animal) 便將 pointcut speakCallOne() 限定在 Animal 及其子類(也就是 Cat Dog ,而不包含 Zoo )。這里當(dāng)然可以使用 call (* Animal.speak()) 來代替 target 。和靜態(tài)的類型聲明不同, target 并不能靜態(tài)地確定的每一個(gè)連接點(diǎn),因?yàn)槠ヅ涫腔谶\(yùn)行時(shí)的類型信息。在使用 AJDT 的情況下,可以看到 target 和靜態(tài)的類型聲明的不同:

    ??? ?? 1)使用靜態(tài)的類型聲明的圖示:

    Screenshot3.png


    Screenshot4.png


    ??? ?? 可以看到,在方面AspectDemo中,before通知的左面有一個(gè)向上的小箭頭表示其為通知,而Zoo中的void speak()方法中a.speak();一行的左面有個(gè)向右的小箭頭,表明其匹配了一個(gè)通知(也就是AspectDemo中的before通知)。
    ??? ?? 2)
    使用target的圖示:

    Screenshot1.png

    Screenshot2.png

    ??? ?? 和靜態(tài)的類型聲明不同,使用了target的before前的箭頭上有個(gè)問號(hào),以表明target動(dòng)態(tài)的不確定性。而Zoo的main中調(diào)用的方法z.speak()前有個(gè)類似于speak()中的a.speak();的箭頭,不同的是,z.speak()前的箭頭上有個(gè)問號(hào),這表明此處speak()并不確定是否匹配通知(因?yàn)閠arget是動(dòng)態(tài)確定連接點(diǎn))。而實(shí)際上情況是,z.speak()確實(shí)不是通知的連接點(diǎn)。

    ??? ??? 對(duì)于targetIdentifier)的使用,示例如下:

    ??? publicpointcut speakCallTwo(Object o):

    ??? ??? call(* Animal.speak()) && target(o);

    ??? ??? before(Object o):speakCallTwo(o){

    ??? ??? ??? ??? System.out.println(o.getClass());

    ??? ??? }

    ??? }

    ??? ??? 通過將 target付給 Object o,可以在before通知中調(diào)用 o的一些操作。

    ??? ??? thistarget指示符的一個(gè)補(bǔ)充,它的格式與target相同。在含義上,this表示切入點(diǎn)所匹配的方法的調(diào)用類,而target表示匹配方法的目標(biāo)類。例如:

    ??? ??? publicpointcut anotherSpeakCall():

    ??? ??? ??? call(* speak()) && target(Animal) && this(Zoo);

    ??? ??? target(Animal) 表示void speak()方法是Animal及子類的,它不會(huì)匹配 Zoovoid speak()方法。而this(Zoo)會(huì)匹配調(diào)用了Animal及子類的void speak()方法的 Zoo類的方法,這里就是Zoovoid speak()方法。

    ??? ??? 如上便是關(guān)于targetthis的基本用法。該文參考了《Eclipse AspectJ》和《AspectJ cookbook》。

    posted on 2007-07-09 09:17 kafka0102 閱讀(2718) 評(píng)論(3)  編輯  收藏 所屬分類: AOP

    評(píng)論

    # re: AspectJ學(xué)習(xí)(2)使用切入點(diǎn) target和this 2008-05-09 08:32 davide520
    謝謝博主.  回復(fù)  更多評(píng)論
      

    # re: AspectJ學(xué)習(xí)(2)使用切入點(diǎn) target和this[未登錄] 2008-11-01 09:42 piggy
    不錯(cuò),受益了.  回復(fù)  更多評(píng)論
      

    # re: AspectJ學(xué)習(xí)(2)使用切入點(diǎn) target和this[未登錄] 2011-03-16 13:12 max
    target() and this() work only for non-static methods  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 无码日韩人妻AV一区免费l| 亚洲一卡2卡3卡4卡国产网站| 亚洲国产区男人本色在线观看| 日韩精品无码专区免费播放| 国产亚洲一区二区手机在线观看| 一级做a毛片免费视频| 亚洲一区二区精品视频| 日本一区二区三区免费高清在线| 国产中文字幕免费| 羞羞漫画页面免费入口欢迎你| 国产免费直播在线观看视频| 精品亚洲成A人在线观看青青| 免费观看四虎精品国产永久| 一个人看的www免费高清| 亚洲理论电影在线观看| 久久成人无码国产免费播放| 久久99亚洲网美利坚合众国| 无码乱肉视频免费大全合集| 亚洲AV无码一区二区三区牛牛| 日韩一区二区在线免费观看| 一级毛片人与动免费观看| 日韩亚洲欧洲在线com91tv| 中文字幕免费高清视频| 亚洲一级视频在线观看| 手机在线免费视频| 黄页网址在线免费观看| 国产亚洲综合色就色| 四虎在线视频免费观看视频| 亚洲午夜精品一区二区麻豆| 免费乱码中文字幕网站| 欧洲人免费视频网站在线| 亚洲真人无码永久在线观看| 无码国产亚洲日韩国精品视频一区二区三区 | a一级爱做片免费| 久久久久久亚洲精品| 免费无码黄十八禁网站在线观看| 色网站在线免费观看| 久久精品国产亚洲AV电影| 日本免费中文字幕在线看| 久操视频免费观看| 亚洲国产精品成人午夜在线观看|