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

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一级成人a做片免费| 亚洲AV香蕉一区区二区三区| 丝瓜app免费下载网址进入ios| 国产一区二区三区在线免费 | h片在线免费观看| 亚洲视频精品在线| 久久狠狠躁免费观看2020| 亚洲午夜久久影院| 亚洲国产精品免费在线观看| 亚洲成人在线免费观看| 99精品国产免费久久久久久下载| 亚洲午夜无码久久| 无码欧精品亚洲日韩一区夜夜嗨| 五级黄18以上免费看| 久久青青草原亚洲av无码| A级毛片高清免费视频在线播放| 亚洲国产精品不卡在线电影| 亚洲精品在线免费观看| 亚洲人成网站在线在线观看| 免费国产a国产片高清网站| 二区久久国产乱子伦免费精品 | 久久亚洲国产成人影院| 在线看片无码永久免费aⅴ| 九九免费精品视频在这里| 亚洲国产婷婷六月丁香| 中文免费观看视频网站| 亚洲国产成人久久综合| 国产综合亚洲专区在线| 亚洲黄色免费电影| 精品视频免费在线| 亚洲av无码精品网站| 成人午夜免费福利| 国产精品玖玖美女张开腿让男人桶爽免费看 | 国产亚洲视频在线观看| 亚洲欧洲美洲无码精品VA| 最近中文字幕mv免费高清视频8| 亚洲欧美国产欧美色欲| 亚洲线精品一区二区三区影音先锋| 2019中文字幕免费电影在线播放| 精品久久久久久久久亚洲偷窥女厕| 亚洲成A人片在线观看WWW|