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

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: ww在线观视频免费观看w| 精品熟女少妇aⅴ免费久久| 亚洲情a成黄在线观看| 一级毛片在线免费观看| 色噜噜噜噜亚洲第一| 亚洲一级二级三级不卡| 亚洲av再在线观看| 成年私人影院免费视频网站| 中国一级特黄高清免费的大片中国一级黄色片 | 最近免费中文在线视频| 成人国产精品免费视频| 深夜特黄a级毛片免费播放| 亚洲精品中文字幕无码AV| 亚洲va无码手机在线电影| 久久久久无码专区亚洲av| 国产免费牲交视频| 国产一区二区视频免费| 四虎影永久在线高清免费| 亚洲A∨精品一区二区三区| 国产免费看插插插视频| 免费真实播放国产乱子伦| 日本免费电影一区| 免费在线观看自拍性爱视频| 色噜噜的亚洲男人的天堂| 一个人看的www免费高清| 久久国产免费直播| 亚洲黄色免费网站| 少妇高潮太爽了在线观看免费| 最近高清国语中文在线观看免费 | 亚洲国产精品热久久| 亚洲视频一区在线观看| 亚洲日韩中文字幕无码一区| 亚洲国产欧美日韩精品一区二区三区| 亚洲精品无码永久在线观看男男| 国产99久久亚洲综合精品| 亚洲高清免费视频| 成年女人午夜毛片免费看| 亚洲一区视频在线播放 | 在线观看永久免费| 亚洲AV无码专区日韩| 91亚洲国产成人久久精品网址|