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














AspectJ的簡(jiǎn)單的HelloWorld方面












將上述兩個(gè)文件保存在同一目錄中,運(yùn)行ajc命令,編譯這兩個(gè)文件,并產(chǎn)生方面和類的.class文件。
ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% com/oreilly/aspectjcookbook/MyClass.java com/oreilly/aspectjcookbook/HelloWorld.java
在使用上述命令過程中,需要確保aspectjrt.jar在你的類路徑中。
ajc編譯器會(huì)將產(chǎn)生兩個(gè).class文件:MyClass.class和HelloWorld.class。并可通過正常的java命令來運(yùn)行:
java -classpath %MY_CLASSPATH% com.oreilly.aspectjcookbook.MyClass
可得到如下結(jié)果:
Hello World
In the advice attached to the call pointcut
Inside foo(int , String)
是不是很簡(jiǎn)單呢?現(xiàn)在我們來分析一下方面的每一行的含義:

2

3

4

5

6

7

8

9

10

11

12

第3行聲明了一個(gè)方法。
第4行和第5行聲明單一命名的切入點(diǎn)的邏輯。切入點(diǎn)邏輯指定了應(yīng)用程序中的任何連接點(diǎn),本例中會(huì)捕獲對(duì)void com.oreilly.aspectjcookbook.MyClass.foo(int,String)方法的調(diào)用。切入點(diǎn)被命名為callPointcut(),使得可以在方面的作用域內(nèi)的任意位置都可以引用它。
第8行到11行聲明單一通知塊。before()通知只是簡(jiǎn)單地指出它將在任何被callPointcut()切入點(diǎn)匹配的連接點(diǎn)之前執(zhí)行。
注意:除了.java可作為后綴名以外,.aj也可以作為后綴名使用。ajc工具都會(huì)編譯所提供的文件。兩者沒有區(qū)別,只是個(gè)人喜好而已。
三. 編譯一個(gè)方面和多個(gè)Java文件
如果需要多個(gè)文件,那么按上述方法編譯是一件痛苦的事情。好在我們可以編寫一個(gè)AspectJ配置構(gòu)建文件。配置構(gòu)建文件的后綴名為.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%
四. 織入方面到j(luò)ar中
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選項(xiàng)強(qiáng)制ajc編譯器從提供的.jar文件中把Java字節(jié)碼提取到-d選項(xiàng)所指定的目錄中。然后,ajc編譯器將把字節(jié)碼在方面織入過程中。
3. 上述命令并不會(huì)產(chǎn)生新的.jar包,如需要將方面織入到新的包中,則需要使用-ourjar選項(xiàng):
ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% -inpath MyApp.jar -outjar MyAspectOriente的App.jar com/oreilly/aspectjcookbook/HelloWorld.java
五.其他
aj命令可以加載時(shí)織入方面
ajdoc則可生成Javadoc文檔
六. 使用Ant構(gòu)建一個(gè)AspectJ項(xiàng)目


















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