Spring 切點表示式

2021-08-20 07:50:13 字數 2588 閱讀 5585



摘要: spring中的aspectj切點表示式函式 切點表示式函式就像我們的gps導航軟體。通過切點表示式函式,再配合萬用字元和邏輯運算子的靈活運用,我們能很好定位到我們需要織入增強的連線點上。經過上面的鋪墊,下面來看看springz中支援的切點表

spring中的aspectj切點表示式函式

切點表示式函式就像我們的gps導航軟體。通過切點表示式函式,再配合萬用字元和邏輯運算子的靈活運用,我們能很好定位到我們需要織入增強的連線點上。經過上面的鋪墊,下面來看看springz中支援的切點表示式函式。

1. 方法切點函式

函式

入參

說明

示例

execution()

方法匹配字串

滿足某一匹配模式的的所有目標類方法連線點

execution(* com.yc.service.*.*(..))在配置service層的事務管理時常用,定位於任意返回型別(第乙個」*」) 在com.yc.service包下的所有類(第二個」*」)下的所有方法(第三個」*」),且這個方法的入參為任意型別、數量(體現在 「(..)「)

@annotation()

方法註解類名

標註了特定註解的目標方法連線點上

@anntation(com.yc.controller.needrecord),定位於controller層中任何新增@needrecord的方法,這可以方便地對控制層中某些方法被呼叫(如某人某時間登陸、進入後台管理介面)新增日誌記錄。

1. execution詳解

execution的語法表示式如下:execution(《修飾符》 《返回型別》 《類路徑》 《方法名》(《引數列表》) 《異常模式》 ) 

其中,修飾符和異常是可選的,如果不加類路徑,則預設對所有的類生效。它常用例項如下:

1. 通過方法簽名、返回值定義切點:

- `execution(public * *service(..))`:定位於所有類下返回值任意、方法入參型別、數量任意,public型別的方法

- `execution(public string *service(..))`:定位於所有類下返回值為string、方法入參型別、數量任意,public型別的方法

2. 通過類包定義切點:

- `execution(* com.yc.controller.basecontroller+.*(..))`:匹配任意返回型別,對應包下basecontroller類及其子類等任意方法。

- `execution(* com.*.(..))`:匹配任意返回型別,com包下所有類的所有方法

- `execution(* com..*.(..))`:匹配任意返回型別,com包、子包下所有類的所有方法

注意.表示該包下所有類,..則涵括其子包。

3. 通過方法入參定義切點

- 這裡「\*」表示任意型別的乙個引數,「..」表示任意型別任意數量的引數

- `execution(* speak(integer,*))`:匹配任意返回型別,所有類中只有兩個入參,第乙個入參為integer,第二個入參任意的方法

- `execution(* speak(..,integer,..))`:匹配任意返回型別,所有類中至少有乙個integer入參,但位置任意的方法。

2. annotation詳解

此註解用於定位標註了某個註解的目標切點。下面我們來看乙個模擬使用者登入成功後日誌記錄使用者名稱、時間和呼叫方法的示例,

1. 自定義註解

@retention(retentionpolicy.class)//生命注釋保留時長,這裡無需反射使用,使用class級別

@target(elementtype.method)//生命可以使用此註解的元素級別型別(如類、方法變數等)

public @inte***ce needrecord

。2. 定義切面(配置增強和定位切點)

@aspect//將當前類標註成乙個切面。

public class annotation_aspect

}3. 定義目標物件

@needrecord

public void login(string name)

4. 配置ioc容器

這裡需注意: 

1. 和 標註在目標物件annotation_aspect的註解@aspect缺一不可,否則呼叫login方法時,record方法不會被呼叫 

2. 必須在ioc容器中註冊切面和目標物件,以便在下面測試中通過

5. 測試

public static void main(string args)

呼叫測試方法後,會列印資訊: 

i』m zenghao ,i』m logining 

debug: org.springframework.beans.factory.support.defaultlistablebeanfactory - returning cached instance of singleton bean 『test.aop2.annotation_aspect#0』//log4j的日誌記錄列印 

日誌記錄:使用者zenghao在2016-03-21 08:27;48呼叫了void test.aop2.usercontroller.login(string)方法

APO切點表示式

在使用spring框架配置aop的時候,不管是通過xml配置檔案還是註解的方式都需要定義pointcut 切入點 例如定義切入點表示式 execution com.sample.service.impl.execution 是最常用的切點函式,其語法如下所示 整個表示式可以分為五個部分 1 exec...

SpringAop切點表示式

1.1 springaop切點表示式 execution 訪問修飾符 返回值型別 包名.類名.方法名 引數 execution public void com.zhan.aop.target.method 返回值型別 包名 類名 方法名可以用 代表任意 包名與類名之間有個.代表當前包下的類,兩個點....

SpringAOP 切點表示式演變

execution int com.gc.service.loggerserviceimpl.add 當前切點為add乙個方法 execution int com.gc.service.loggerserviceimpl.表示任意個字元,代指方法名可以是任意的 execution com.gc.se...