<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)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产色爽免费视频| 国产免费AV片在线播放唯爱网| 亚洲欧美成人av在线观看| 亚洲乱码中文论理电影| 亚洲成在人线aⅴ免费毛片| 曰韩无码AV片免费播放不卡 | 在线观看亚洲人成网站| 最新亚洲精品国偷自产在线 | 亚洲国产成人久久精品动漫| 亚洲中文无码永久免| 99久久免费国产特黄| 男人的好免费观看在线视频| 国内精品久久久久久久亚洲| 亚洲妇女水蜜桃av网网站| 一级人做人a爰免费视频| 亚色九九九全国免费视频| 亚洲免费日韩无码系列| 亚洲三级在线观看| 波多野结衣久久高清免费| 亚洲毛片在线观看| 91免费国产在线观看| 国产国拍亚洲精品福利| 亚洲人成网站免费播放| 国产a不卡片精品免费观看| 亚洲国产成人精品青青草原| 最近2019中文字幕免费看最新 | 亚洲一区二区三区无码中文字幕| 亚洲熟妇少妇任你躁在线观看| 免费精品国偷自产在线在线| 亚洲av乱码一区二区三区按摩 | 亚洲另类小说图片| 日本免费福利视频| 国产成人精品日本亚洲专区6| 久久青草免费91线频观看不卡| 亚洲色欲久久久久综合网| 久久午夜无码免费| 亚洲 日韩经典 中文字幕| 国产成人毛片亚洲精品| 88av免费观看| 亚洲一区二区中文| 污视频在线免费观看|