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

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

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

    最愛Java

    書山有路勤為徑,學海無涯苦作舟

    《AspectJ Cookbook》讀書筆記二: 初始AspectJ

    一. 安裝AspectJ
            從最簡單的方面來說,AspectJ安裝很簡單:
             1.從http://www.aspectj.org下載最新版本(目前版本是1.6.0)。
             2.通過雙擊下載下來的JAR來安裝。其默認安裝目錄為asprctj1.6目錄。
             3.可在安裝目錄的bin目錄下調用ajc命令查看幫助。
             4.使用AspectJ只需復制aspectjrt.jar即可。

    二. 第一個簡單的方面
            
    簡單的業務邏輯Java類
    package com.oreilly.aspectjcookbook;

    public class MyClass {
        
    public void foo(int number , String name) {
            System.out.println(
    "Inside foo(int , String)");
        }

        
        
    public static void main(String[] args) {
            
    //Create an instance of MyClass
            MyClass myObject = new MyClass();
            
    //Make the call to foo
            myObject.foo(1 , "Russ Miles");
        }

    }

            AspectJ的簡單的HelloWorld方面
    package com.oreilly.aspectjcookbook;

    public aspect HelloWorld {
        pointcut callPointcut() :
            call(
    void com.oreilly.aspectjcookbook.MyClass.foo(int,String));
        
        
        before() : callPointcut() 
    {
            System.out.println(
    "Hello World");
            System.out.println(
    "In the advice attached to the call pointcut");
        }

    }

    將上述兩個文件保存在同一目錄中,運行ajc命令,編譯這兩個文件,并產生方面和類的.class文件。
            ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% com/oreilly/aspectjcookbook/MyClass.java com/oreilly/aspectjcookbook/HelloWorld.java
    在使用上述命令過程中,需要確保aspectjrt.jar在你的類路徑中。
    ajc編譯器會將產生兩個.class文件:MyClass.class和HelloWorld.class。并可通過正常的java命令來運行:
            java -classpath %MY_CLASSPATH% com.oreilly.aspectjcookbook.MyClass
    可得到如下結果:
            Hello World
            In the advice attached to the call pointcut  
            Inside foo(int , String)
    是不是很簡單呢?現在我們來分析一下方面的每一行的含義:
     1package com.oreilly.aspectjcookbook;
     2
     3public aspect HelloWorld {
     4    pointcut callPointcut() :
     5        call(void com.oreilly.aspectjcookbook.MyClass.foo(int,String));
     6    
     7    
     8    before() : callPointcut() {
     9        System.out.println("Hello World");
    10        System.out.println("In the advice attached to the call pointcut");
    11    }

    12}


     第3行聲明了一個方法。
     第4行和第5行聲明單一命名的切入點的邏輯。切入點邏輯指定了應用程序中的任何連接點,本例中會捕獲對void com.oreilly.aspectjcookbook.MyClass.foo(int,String)方法的調用。切入點被命名為callPointcut(),使得可以在方面的作用域內的任意位置都可以引用它。
     第8行到11行聲明單一通知塊。before()通知只是簡單地指出它將在任何被callPointcut()切入點匹配的連接點之前執行。
    注意:除了.java可作為后綴名以外,.aj也可以作為后綴名使用。ajc工具都會編譯所提供的文件。兩者沒有區別,只是個人喜好而已。

    三. 編譯一個方面和多個Java文件
        
    如果需要多個文件,那么按上述方法編譯是一件痛苦的事情。好在我們可以編寫一個AspectJ配置構建文件。配置構建文件的后綴名為.lst,其中包含了所有在編譯中需要使用的類文件和方面的名稱。如:
            //File in file.lst
            com/oreilly/aspectjcookbook/MyClass.java
            com/oreilly/aspectjcookbook/MyAspect.java
            com/oreilly/aspectjcookbook/AnotherClass.java
            com/oreilly/aspectjcookbook/AnotherAspect.java
    然后使用如下命令編譯:
            ajc -argfile file.lst -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY%

    四. 織入方面到jar中
        1.首先編譯MyClass.java并打包到MyApp.jar中
            java -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% com/oreilly/aspectjcookbook/MyClass.java
            jar -cvf MyApp.jar com/oreilly/aspectjcookbook/MyClass.class
        2.ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% -inpath MyApp.jar com/oreilly/aspectjcookbook/HelloWorld.java
            -inpath選項強制ajc編譯器從提供的.jar文件中把Java字節碼提取到-d選項所指定的目錄中。然后,ajc編譯器將把字節碼在方面織入過程中。
        3. 上述命令并不會產生新的.jar包,如需要將方面織入到新的包中,則需要使用-ourjar選項:
            ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% -inpath MyApp.jar -outjar MyAspectOriente的App.jar com/oreilly/aspectjcookbook/HelloWorld.java

    五.其他
      aj命令可以加載時織入方面
      ajdoc則可生成Javadoc文檔

    六. 使用Ant構建一個AspectJ項目

    <?xml version="1.0" encoding="utf-8"?>
    <project basedir="." default="compile" name="test">
        
    <property name="src" value="src"/>
        
    <property name="build" value="build"/>
        
    <taskdef resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">
            
    <classpath>
                
    <pathelement location="%ASPECTJ_INSTALLATION%/lib/aspectjtools.jar"/>
            
    </classpath>
        
    </taskdef>
        
    <target name="compile">
            
    <mkdir dir="${build}"/>
            
    <iajc destdir="${build}" sourceroots="${src}">
                
    <classpath>
                    
    <pathelement location="%ASPECTJ_INSTALLATION%/lib/aspectjrt.jar"/>
                
    </classpath>
            
    </iajc>
        
    </target>
    </project>

        上述代碼所做的工作:
          1. 使用AspectJ任務屬性定義了一個新的任務
          2. 指定aspectjtools.jar的位置
          3. 聲明一個構建目標,他使用iajc任務來編譯項目,這個任務反過來又依賴于aspectjrt.jarlai

    posted on 2008-06-30 23:10 Brian 閱讀(853) 評論(0)  編輯  收藏 所屬分類: 《AspectJ Cookbook》讀書筆記

    公告


    導航

    <2008年6月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    統計

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一区二区三区在线免费观看视频| 免费人成激情视频在线观看冫| 久久精品亚洲乱码伦伦中文| 免费国产99久久久香蕉| 亚洲大成色www永久网址| 亚洲区日韩区无码区| 222www免费视频| 男女男精品网站免费观看| 亚洲精品在线网站| 亚洲国产精品尤物yw在线| 亚洲黄色片免费看| 国产vA免费精品高清在线观看| 亚洲婷婷在线视频| 国产午夜亚洲不卡| 成人免费午间影院在线观看| 两个人日本免费完整版在线观看1| 久久夜色精品国产噜噜亚洲a| 亚洲精品无码久久久久去q| 免费人成视频在线| 无码日韩精品一区二区三区免费| 亚洲AV无码一区二区三区电影| 亚洲AV色香蕉一区二区| 亚洲国产精品尤物YW在线观看| 久久午夜免费视频| 日本免费污片中国特一级| 日本一区二区三区免费高清在线| 亚洲三级在线视频| 亚洲一卡2卡三卡4卡有限公司| 亚洲一区视频在线播放| 国产日本一线在线观看免费| 永久免费AV无码网站国产| 牛牛在线精品免费视频观看| 亚洲熟妇无码一区二区三区导航| 亚洲情a成黄在线观看动漫尤物| 亚洲一区二区三区在线播放| 国产成人高清精品免费鸭子| 免费视频专区一国产盗摄| 无码人妻精品中文字幕免费| 中文无码日韩欧免费视频| 美女隐私免费视频看| 久久久久亚洲国产AV麻豆|