主流的AOP框架有2個:Spring AOP、AspectJ。java
Spring AOP使用純Java實現,不須要專門的編譯器和類加載器。框架
AspectJ是基於Java語言的AOP框架,能夠單獨使用,也能夠內嵌到Spring AOP中。單獨使用須要專門的編譯器、類加載器。函數
這裏介紹如何單獨使用AspectJ。測試
一、搜素aspectj,找到這個spa
二、插件
三、最新穩定的發佈版命令行
四、選擇最近的鏡像下載3d
至此,獲得一個aspectj的jar文件。日誌
一、命令行下執行code
java -jar C:\Users\chy\Downloads\aspectj-1.9.4.jar
此句代碼是運行這個jar文件,安裝AspectJ。若是以前沒在Path環境變量中添加jdk\bin的路徑,須要先cd到jdk\bin所在目錄,jar包的路徑要使用本身的。
二、檢查jdk路徑是否正確
三、選擇AspectJ的安裝路徑
四、目錄結構以下
bin下的ajc是AspectJ的編譯器(javac是java的編譯器)。
lib目錄以下
一、插件中要安裝
第一個是支持單獨使用AspectJ,第二個是支持Spring AOP、在Spring中使用AspectJ。此處安裝第一個就ok,但之後會用到第二個,咱們一同安上。其實,實際項目中咱們使用的基本都是第二個。
二、新建java項目
三、將lib下的aspectjrt.jar包添加到項目依賴中。注意這不是從官網下載獲得的那個jar包。
四、設置aspectj的編譯器
ok,項目環境配好。
IDEA內置了ajc編譯器,只須要提供lib下的jar包便可,其實咱們能夠簡單粗暴地解壓官網下載的jar,獲得lib就能夠。固然,這種方式不能獲得ajc,就是說不能在命令行下編譯aspectj,只能使用IDEA內置的ajc。
安裝的這種方式,能夠直接在命令行下使用ajc命令編譯aspectj項目的java文件,固然也能夠在IDEA中使用內置的ajc編譯。
一、新建包user,包下新建類User
1 public class User { 2 public void addUser(){ 3 System.out.println("正在添加用戶"); 4 System.out.println("添加用戶成功"); 5 } 6 }
二、新建包my_aspect,包下新建Aspect:MyAspect
1 public aspect MyAspect { 2 /* 3 前加強。execution()的參數是一個函數原型,表示對全部知足這個函數原型的方法都進行加強。 4 第一個*表示返回值能夠是任何類型 5 後面是函數名,包名.類名.函數名()的形式,第二個*表示能夠是user包下的任何類,第三個*表示能夠是任何方法 6 括號裏的2個..表示方法的參數表能夠是任何數據類型、任何個數 7 能夠不使用通配符,顯式指定也行 8 */ 9 before():execution(* user.*.*(..)){ 10 System.out.println("正在檢查權限"); 11 System.out.println("權限已夠"); 12 } 13 14 /* 15 後加強 16 咱們顯式指定返回值是void類型,顯式指定類、方法,無參數 17 */ 18 after():execution(void user.User.addUser()){ 19 System.out.println("正在記錄日誌"); 20 System.out.println("已記錄日誌"); 21 } 22 }
也可使用其餘的通知方法,這些方法名都是預約義的,不能隨意修改。
注意自定義的標識符,好比包名、類名不能使用aspectj的關鍵字,上面紅字aspect就是一個aspectj的關鍵字。
三、新建包test,包下新建測試類Test
1 public class Test { 2 public static void main(String[] args) { 3 User user=new User(); 4 user.addUser(); 5 } 6 }
四、運行,控制檯輸出以下
正在檢查權限
權限已夠
正在添加用戶
添加用戶成功
正在記錄日誌
已記錄日誌