AspectJ開發

 

主流的AOP框架有2個:Spring  AOP、AspectJ。java

Spring AOP使用純Java實現,不須要專門的編譯器和類加載器。框架

AspectJ是基於Java語言的AOP框架,能夠單獨使用,也能夠內嵌到Spring AOP中。單獨使用須要專門的編譯器、類加載器。函數

 這裏介紹如何單獨使用AspectJ。測試

 

 

 

下載AspectJ

一、搜素aspectj,找到這個spa

 

 

二、插件

 

 

三、最新穩定的發佈版命令行

 

 

四、選擇最近的鏡像下載3d

至此,獲得一個aspectj的jar文件。日誌

 

 

 

 

安裝AspectJ

一、命令行下執行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目錄以下

 

 

 

IDEA環境配置

一、插件中要安裝

第一個是支持單獨使用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編譯。

 

 

 

 

AspectJ項目示例

一、新建包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 }

 

 

 

四、運行,控制檯輸出以下

正在檢查權限
權限已夠
正在添加用戶
添加用戶成功
正在記錄日誌
已記錄日誌
相關文章
相關標籤/搜索