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

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

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

    最愛(ài)Java

    書山有路勤為徑,學(xué)海無(wú)涯苦作舟

    《AspectJ Cookbook》讀書筆記十六: 增強(qiáng)類和編譯器

            本章節(jié)說(shuō)明了如何使用靜態(tài)橫切技術(shù),以靜態(tài)方式使用AspectJ中的方面把行為和接口引入現(xiàn)有的類中。使用這些技術(shù),可以擴(kuò)展類來(lái)實(shí)現(xiàn)接口,從新的父類擴(kuò)展類,引入新方法和屬性,減輕說(shuō)發(fā)生異常的影響,以及繼承多個(gè)基類。
    一.擴(kuò)展現(xiàn)有的類
    package com.aspectj;

    public aspect ExtendClassRecipe {
        
    private int MyClass.newVariable = 20;
        
        
    public int MyClass.bar(String name) 
            System.out.println(
    "In bar(String name) , name:" + name);
            
    return this.newVariable; 
        }

    }

     
            示例中將屬性newVariable和方法bar(String)添加到了MyClass類中。

    二.聲明類之間的繼承關(guān)系
        使用declare parents語(yǔ)句,指定特定的類是從另一個(gè)類擴(kuò)展而來(lái)。
        以下代碼說(shuō)明了如何為MyClass類指定新的繼承關(guān)系
    package com.aspectj;

    public aspect IntroduceInheritanceRecipe {
        declare parents:MyClass 
    extends AnotherClass;
    }

    三.使用方面實(shí)現(xiàn)接口
        使用declare parents語(yǔ)句,指定特定的類實(shí)現(xiàn)特定的接口。
    package com.aspectj;

    public aspect ImplementInterfaceRecipe {
        declare parents:MyClass 
    implements MyInterface;
    }
        把接口應(yīng)用于現(xiàn)有類的能力允許通過(guò)接口類型的引用那個(gè)類的對(duì)象,如:
    //Create an instance of MyClass
    MyInterface myObject = new MyClass();
    //
    //Work with the interface reference
    myObject.foo(1,"Russ");

    四.聲明默認(rèn)的接口實(shí)現(xiàn)
    package com.aspectj;

    public aspect DefaultInterfaceImplementationRecipe {
        declare parents:MyClass 
    implements MyInterface;

        
    //public void MyInterface.bar(String name) {
            
    //System.out.println("bar(String) called on " + this);
        
    //}
    }

    五.減輕異常的影響
        使用declare soft語(yǔ)句,可以指定一組應(yīng)該減輕其影響的異常--也就是說(shuō),在通過(guò)特定連接點(diǎn)選擇的連接點(diǎn)上引發(fā)這些異常時(shí),將其轉(zhuǎn)換成未捕獲的異常。
        示例中說(shuō)明了減輕在void foo()方法上引發(fā)的ExcepionA異常的影響,使得該方法的用戶不必關(guān)心如何處理這個(gè)異常。
    package com.aspectj;

    public aspect SoftExceptionRecipe {
        pointcut callPointCut() : call(
    void MyClass.foo());
        declare soft : ExceptionA : callPointCut();
    }

    六.擴(kuò)展編譯
    分別使用declare error或declare warning語(yǔ)句,指定應(yīng)該引發(fā)編譯器錯(cuò)誤或警告的條件。
    示例說(shuō)明了如何聲明一個(gè)新的錯(cuò)誤和警告,如果在正在編譯的應(yīng)用程序內(nèi)發(fā)現(xiàn)指定的條件,編譯器就會(huì)引發(fā)該錯(cuò)誤或警告。
    package com.aspectj;

    public aspect CompilaionAdviceRecipe {
        declare error:call(
    void ProtectedAccessClass.setValue(int))  : "Must only set the ProtectedAccessClass.value from a MyClass object";
        
        declare warning:call(
    void ProtectedAccessClass.getValue()) :"Should only be reading ProtectedAccessClass.value from a MyClass object";
    }

    posted on 2008-08-27 09:31 Brian 閱讀(468) 評(píng)論(0)  編輯  收藏 所屬分類: 《AspectJ Cookbook》讀書筆記

    公告


    導(dǎo)航

    <2008年8月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    統(tǒng)計(jì)

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 久久青青草原亚洲AV无码麻豆| 黄网址在线永久免费观看 | 日韩亚洲翔田千里在线| 88av免费观看入口在线| 亚洲伦理一区二区| 久久精品毛片免费观看| 香蕉蕉亚亚洲aav综合| 你懂的在线免费观看| 欧洲亚洲国产清在高| 一级毛片**不卡免费播| 亚洲国产综合精品中文第一区 | 亚洲一区精品视频在线| 国产v精品成人免费视频400条| 亚洲人成免费电影| 日韩欧毛片免费视频| 亚洲日韩中文字幕一区| 成人免费午夜视频| 大桥未久亚洲无av码在线| 亚洲人午夜射精精品日韩| 国产久爱免费精品视频| 亚洲精品你懂的在线观看| 亚洲一区二区在线免费观看| 亚洲av无码一区二区三区观看| 欧洲精品免费一区二区三区| 香蕉国产在线观看免费| 亚洲AV第一页国产精品| 毛片大全免费观看| 青青久久精品国产免费看| 国产亚洲av片在线观看播放| 国产成人精品免费视| 小说专区亚洲春色校园| 亚洲AV午夜成人片| 成人性生交视频免费观看| 免费人成网站永久| 亚洲精品在线播放| 国产又长又粗又爽免费视频| 在线观看肉片AV网站免费| 亚洲人成色777777精品| 亚洲大尺度无码无码专区| 国内精品乱码卡1卡2卡3免费| 又黄又大的激情视频在线观看免费视频社区在线|