AspectJ 5中通知總結及其他註解使用

2021-09-12 06:43:45 字數 2998 閱讀 8726

2後置

/**

* @afterreturning:後置通知

* 屬性:

* 1.value 切入點表示式, 表示切面執行的位置

* 2.returning 自定義的變數,表示目標方法的返回值,

* 這個變數名稱必須和通知方法的引數名一樣。

* 位置:方法的上面

* 特點:

* 1.在目標方法之後執行的。

* 2.能夠獲取到目標方法的返回值。

* 3.不能影響目標方法的執行。

* * 引數

* joinpoint : 必須是引數列表的第乙個

* * object result = doother();

* myafterreturning(result)

*/@afterreturning(value="execution(* *..someserviceimpl.doother(..))",returning="result")

public void myafterreturning(joinpoint jp,object result)

system.out.println("方法的定義:"+jp.getsignature());

//切面的功能,事務處理

system.out.println("後置通知:在目標方法之後執行,能夠獲取到目標方法的返回值:"+result);

3 環繞

/**

* @throws throwable

* @around:環繞通知

* 屬性: value 切入點表示式。 表示切面執行的位置

* 位置:在方法的定義的上面

* 特點:

* 1.在目標方法的前和後都能增強功能。

* 2.控制目標方法是否執行

* 3.能修改目標方法的執行結果。

* * 環繞通知方法的定義

* 1.必須有返回值, 表示目標方法的執行結果(可以是修改後的結果)

* 2.必須有引數proceedingjoinpoint ,

* 它主要用來執行目標方法(jdk中的method.invoke(target, args);)

*/@around(value="execution(* *..someserviceimpl.dofirst(..))")

public object myaround(proceedingjoinpoint pjp) throws throwable

system.out.println("環繞通知:在目標方法之前,加入日誌功能");

if("lisi".equals(uname))

//修改目標方法的執行結果

if(obj !=null)

system.out.println("環繞通知:在目標方法之後,加入事務提交");

//返回目標方法的執行結果

return obj;

}

4 異常

/**

* @afterthrowing :異常通知

* 屬性:

* 1.value 切入點表示式, 表示切面執行的位置

* 2.throwing 自定義的變數,表示目標方法丟擲的異常物件, 必須和通知方法的引數名一樣。

* 通過throwing能夠獲取到目標方法的異常資訊

* 位置:

* 在方法的定義上面

* 特點

* 1.在目標方法丟擲異常時執行的,沒有異常不執行

* 2.不是異常處理程式, 它只是得到有異常發生。異常還是會被丟擲的

* *

* trycatch(exception exception)

*/@afterthrowing(value="execution(* *..someserviceimpl.dosecond(..))",throwing="ex")

public void myafterthrowing(throwable ex)

5 最終

/**

* @after:最終通知

* 屬性 value 切入點表示式

* 位置 方法的上面

* 特點:

* 1.總是會被執行的。

* 2.在目標方法之後執行的

* * tryfinally

*/@after(value="execution(* *..someserviceimpl.dothird(..))")

public void myafter()

@pointcut

/**

* @after:最終通知

* 屬性 value 切入點表示式

* 位置 方法的上面

* 特點:

* 1.總是會被執行的。

* 2.在目標方法之後執行的

* * tryfinally

*/@after(value="mypt()")

public void myafter()

@before(value="mypt()")

public void mybefore()

/*** @pointcut:定義和管理切入點。

* 屬性 value 表示切入點表示式

* 位置 方法的上面

* 特點:

* @pointcut在乙個方法的上面, 這個方法的名稱就是切入點的別名。

* 在其他的通知方法中, value屬性可以使用方法名稱,表示切入點

*

*/@pointcut(value="execution(* *..someserviceimpl.dothird(..))")

private void mypt()

AspectJ中的五種增強註解及其詳解

1 新增jar類庫 2.在spring配置檔案中新增如下 第一行是掃瞄自定義的包,這次所有與測試相關的類都在com.jd中 第二行是建立乙個自定義的類的bean放在ioc容器中 第三行解釋 如果建立目標物件的目標類中的方法與aspectj切面中切入點表示式匹配,則自動為該目標物件生成動態 物件,該 ...

python 中的md5加密及其實現

開發環境 python3 用到的庫 hashlib,random md5加密,用到了hashlib庫中的md5 random用來生成鹽 import hashlib import random 簡單版的md5加密返回密文函式 def mymd5 pw md hashlib.md5 生成md5對像 m...

Unity5特殊目錄及其目錄中指令碼的編譯順序

特殊目錄中的指令碼編譯順序 assets目錄包含了unity中要用到的所有資源,專案檢視就是直接包含資源目錄的類容。所有放在此目錄下的指令碼都將當作editor指令碼而不是執行時指令碼,這裡裡面的指令碼被設計用來增加編輯器功能。editorguiutility.load函式載入資源時搜尋的目錄,此目...