摘要: 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...