《AspectJ Cookbook》讀書筆記二: 初始AspectJ
從最簡單的方面來說,AspectJ安裝很簡單:
1.從http://www.aspectj.org下載最新版本(目前版本是1.6.0)。
2.通過雙擊下載下來的JAR來安裝。其默認安裝目錄為asprctj1.6目錄。
3.可在安裝目錄的bin目錄下調用ajc命令查看幫助。
4.使用AspectJ只需復制aspectjrt.jar即可。
二. 第一個簡單的方面
簡單的業務邏輯Java類














AspectJ的簡單的HelloWorld方面












將上述兩個文件保存在同一目錄中,運行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)
是不是很簡單呢?現在我們來分析一下方面的每一行的含義:

2

3

4

5

6

7

8

9

10

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項目


















上述代碼所做的工作:
1. 使用AspectJ任務屬性定義了一個新的任務
2. 指定aspectjtools.jar的位置
3. 聲明一個構建目標,他使用iajc任務來編譯項目,這個任務反過來又依賴于aspectjrt.jarlai
posted on 2008-06-30 23:10 Brian 閱讀(854) 評論(0) 編輯 收藏 所屬分類: 《AspectJ Cookbook》讀書筆記