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

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

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

    Open Java Project

    Keep it simple, Stupid, Less is more

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      20 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

    1、開發環境

    l         Eclipse 3.0.1

    l         AspectWerkz2.0 RC2http://aspectwerkz.codehaus.org/releases.html

    l         AspectWerkz Eclipse plugin 2.0.4http://aspectwerkz.codehaus.org/downloads/eclipse

     

    2、對工程使能AspectWerkz

    l         創建普通的Java工程:AWHello

    l         右擊工程名,選擇Enable AspectWerkz AOP使能AspectWerkz

    l         Error Log視圖中可以查看插件產生的跟蹤信息

     

    3、添加依賴的JAR

    目前的插件不會自動添加依賴的AspectWerkz JAR文件到工程中,需要手工添加,這些JAR文件包括(可以在AspectWerkz2.0 RC2lib目錄下找到):

    l         aspectwerkz-2.0.RC2.jar

    l         aspectwerkz-core-2.0.RC2.jar

    l         aspectwerkz-jdk14-2.0.RC2.jarJDK1.4)或aspectwerkz-jdk5-2.0.RC2.jarJDK1.5

    l         concurrent-1.3.1.jar

    l         dom4j-1.4.jar

    l         jarjar-0.3.jar

    l         jrexx-1.1.1.jar

    l         piccolo-1.03.jar

    l         qdox-1.4.jar

    l         trove-1.0.2.jar


     

    4、創建測試程序

    package foo;
     
    public class HelloWorld {
     
        public static void main(String args[]) {
            HelloWorld world = new HelloWorld();
            world.greet();
        }
     
        public void greet() {
            System.out.println("Hello World!");
        }
    }

     

    5、編寫Aspect

    package foo;
     
    import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
     
    public class MyAspect {
     
        public void beforeGreeting(JoinPoint joinPoint) {
            System.out.println("before greeting...");
        }
     
        public void afterGreeting(JoinPoint joinPoint) {
            System.out.println("after greeting...");
        }
    }

    l         MyAspect類包含了用來編織到HelloWorld類中的代碼

    l         注意:Aspect方法必須包含JoinPoint參數

     

    6AOP編織(weaving

    l         使用META-INF/aop.xml來定義Aspect(通常位于工程的/src目錄下)

    <!DOCTYPE aspectwerkz PUBLIC "-//AspectWerkz//DTD//EN" "http://aspectwerkz.codehaus.org/dtd/aspectwerkz2.dtd">
    <aspectwerkz>
        <system id="AWHello">
            <package name="foo">
                    <aspect class="MyAspect">
                           <pointcut name="greetMethod" 
                             expression="execution(* foo.HelloWorld.greet(..))"/>
                           <advice name="beforeGreeting" type="before" 
                             bind-to="greetMethod"/>
                           <advice name="afterGreeting" type="after" 
                             bind-to="greetMethod"/>
                    </aspect>
            </package>
        </system>
    </aspectwerkz>

    l         <package>標記:指定Aspect類所在的包路徑

    l         <aspect>標記:指定Aspect

    l         <pointcut>標記:指定在哪里插入Aspect方法(Pointcut

    ?         該方法只是用來綁定后面<advice>標記指定的 Advice

    ?         expression屬性:必須是符合Join point選擇模式語言的有效表達式,并且要確保全路徑的類名包含到模式中

    l         <advice>標記:指定要插入的Aspect方法(Advice

    ?         name屬性:指定Aspect類中對應的方法名

    ?         type屬性:指定Advice類型,可以是beforeafteraround

    ?         bind-to屬性:指定綁定的Pointcut

    l         這個例子是在HelloWorld.greet()方法調用之前插入MyAspect.beforeGreeting()方法;在HelloWorld.greet()方法返回之后插入MyAspect.afterGreeting()方法

    l         在保存文件時,觸發Eclipse Build時,同樣會觸發基于有效META-INF/aop.xml文件或在Aspect中定義、被編譯的Annotation(后面講述)的AOP編織

     

    7AOP交叉視圖支持

    l         AOP編織發生后,會在Advice應用的地方使用右指向標記來標記

    l         點擊該標記,顯示Quick fix提示,包括該Join point處應用的Advice及其類型

    l         點擊具體Advice,會定位到該Advice的源代碼處

    l         對于當前插件,修改Aspect類不會更新標記處的信息

    l         可以通過修改目標文件或手工執行clean build來實現更新



     

    8、運行程序

    l         首先要在工程build path中添加依賴的tools.jarJAVA_HOME/lib/tools.jar

    l         選擇Run > Run...

    l         在左邊列表中選擇AspectWerkz Application,點擊New按鈕

    l         后面就按正規應用程序的方法運行

    l         本例的運行結果是:

    before greeting...
    Hello World!
    after greeting...

     

    9Annotations支持

    l         Annotations提供了一種在Aspect類中添加元數據的方法,而不是在分離的文件(aop.xml)中指定

    l         本插件包含了AspectWerkz Java 1.4 Annotation編譯器,

    l         Aspect類源代碼編譯時,Annotations也會被編譯

    l         可以在Aspect類中使用JavaDoc風格的注釋定義AnnotationsJDK 1.4),下面是一個使用AnnotationsAspect類:

    package foo;
     
    import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint;
     
    public class MyAspectWithAnnotations {
     
              /**
               * @Before execution(* foo.HelloWorld.greet(..))
               */
               public void beforeGreeting(StaticJoinPoint joinPoint) {
                   System.out.println("before greeting with annotation...");
               }
     
              /**
               * @After execution(* foo.HelloWorld.greet(..))
               */
               public void afterGreeting(StaticJoinPoint joinPoint) {
                   System.out.println("after greeting with annotation...");
               }
    }

    l         對于AspectWerkz 2.x版本,這里可以使用StaticJoinPoint來替代JoinPoint,以優化性能

    l         使用Annotations意味著不需要在aop.xml中描述Aspect的細節,但是仍然需要指定Aspect類:

    <!DOCTYPE aspectwerkz PUBLIC "-//AspectWerkz//DTD//EN" "http://aspectwerkz.codehaus.org/dtd/aspectwerkz2.dtd">
    <aspectwerkz>
        <system id="AWHello">
            <package name="foo">
                    <aspect class="MyAspect">
                           <pointcut name="greetMethod" 
                             expression="execution(* foo.HelloWorld.greet(..))"/>
                           <advice name="beforeGreeting" type="before" 
                             bind-to="greetMethod"/>
                           <advice name="afterGreeting" type="after" 
                             bind-to="greetMethod"/>
                    </aspect>
            </package>
            <aspect class="foo.MyAspectWithAnnotations"/>
        </system>
    </aspectwerkz>

    l         重新運行的結果如下:

    before greeting with annotation...
    before greeting...
    Hello World!
    after greeting...
    after greeting with annotation...

     

    posted on 2005-03-21 22:37 nelson_tu 閱讀(1342) 評論(0)  編輯  收藏 所屬分類: AOP

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 精品国产呦系列在线观看免费| 国产成人精品日本亚洲专一区| 羞羞视频在线观看免费| 曰皮全部过程视频免费国产30分钟| 亚洲已满18点击进入在线观看| 久久精品无码一区二区三区免费| 亚洲人配人种jizz| 麻豆国产人免费人成免费视频| 在线亚洲高清揄拍自拍一品区| 在线观看免费大黄网站| 久久亚洲精品11p| 亚洲中文字幕成人在线| 久久久久久久久久免免费精品| 亚洲成色WWW久久网站| 91福利免费视频| 亚洲最大天堂无码精品区| 国产精品免费_区二区三区观看| xxxx日本在线播放免费不卡| 国产亚洲色婷婷久久99精品| **aaaaa毛片免费同男同女| 国产99在线|亚洲| 亚洲国产精品成人AV无码久久综合影院| 一级毛片免费毛片毛片| 婷婷亚洲综合五月天小说| 男女超爽刺激视频免费播放| 国产精品亚洲色图| 亚洲福利在线视频| 在线成人a毛片免费播放| 中文字幕成人免费高清在线视频 | 波多野结衣免费视频观看 | 猫咪免费人成网站在线观看入口| 亚洲 欧洲 自拍 另类 校园| 国产午夜免费福利红片| MM1313亚洲国产精品| 亚洲精品亚洲人成人网| 最新中文字幕免费视频| 热久久这里是精品6免费观看| 精品亚洲成A人无码成A在线观看| 四虎1515hm免费国产| 免费国产黄网站在线观看可以下载| 亚洲一本一道一区二区三区|