Spring AspectJ切入點語法詳解

2021-08-10 01:58:54 字數 3006 閱讀 9444

定義過濾切入點函式時,是直接把execution已定義匹配表示式作為值傳遞給通知型別的如下:

除了上述方式外,還可採用與apectj中使用pointcut關鍵字類似的方式定義切入點表示式如下,使用@pointcut註解:

使用@pointcut註解進行定義,應用到通知函式afterdemo()時直接傳遞切點表示式的函式名稱mypointcut()即可,比較簡單,下面接著介紹切點指示符。

為了方法通知應用到相應過濾的目標方法上,springaop提供了匹配表示式,這些表示式也叫切入點指示符

在定義匹配表示式時,萬用字元幾乎隨處可見,如*..+,它們的含義如下:

為了方便型別(如介面類名包名)過濾方法,spring aop 提供了within關鍵字。其語法格式如下:

type name 則使用包名或者類名替換即可,來點案例吧。

/** 匹配com.somnus.dao包及其子包中所有類中的所有方法 */

@pointcut("within(com.somnus.dao..*)")

/** 匹配userdaoimpl類中所有方法 */

@pointcut("within(com.somnus.dao.userdaoimpl)")

/** 匹配userdaoimpl類及其子類中所有方法 */

@pointcut("within(com.somnus.dao.userdaoimpl+)")

/** 匹配所有實現userdao介面的類的所有方法 */

@pointcut("within(com.somnus.dao.userdao+)")

如果想根據方法簽名進行過濾,關鍵字execution可以幫到我們,語法表示式如下

對於給定的作用域、返回值型別、完全限定類名以及引數匹配的方法將會應用切點函式指定的通知,這裡給出模型案例:

/** 匹配userdaoimpl類中的所有方法 */

@pointcut("execution(* com.somnus.dao.userdaoimpl.*(..))")

/** 匹配userdaoimpl類中的所有公共的方法 */

@pointcut("execution(public * com.somnus.dao.userdaoimpl.*(..))")

/** 匹配userdaoimpl類中的所有公共方法並且返回值為int型別 */

@pointcut("execution(public int com.somnus.dao.userdaoimpl.*(..))")

/** 匹配userdaoimpl類中第乙個引數為int型別的所有公共的方法 */

@pointcut("execution(public * com.somnus.dao.userdaoimpl.*(int , ..))")

/** 匹配名稱中帶有字尾service的bean */

@pointcut("bean(*service)")

/** 匹配了任意實現了userdao介面的**物件的方法進行過濾 */

@pointcut("this(com.somnus.spring.springaop.dao.userdao)")

/** 匹配了任意實現了userdao介面的目標物件的方法進行過濾 */

@pointcut("target(com.somnus.spring.springaop.dao.userdao)")

/** 匹配使用了markerannotation註解的類(注意是類) */

@pointcut("@within(com.somnus.spring.annotation.markerannotation)")

/** 匹配使用了markerannotation註解的方法(注意是方法) */

@pointcut("@annotation(com.somnus.spring.annotation.markerannotation)")

/** 匹配了任意實現了userdao介面的目標物件的方法並且該介面不在com.somnus.dao包及其子包下 */

@pointcut("target(com.somnus.spring.springaop.dao.userdao) !within(com.somnus.dao..*)")

/** 匹配了任意實現了userdao介面的目標物件的方法並且該方法名稱為adduser */

@pointcut("target(com.somnus.spring.springaop.dao.userdao) && execution(* com.somnus.spring.springaop.dao.userdao.adduser(..))")

Spring Aspectj切入點語法定義

在使用spring框架配置aop的時候,pointcut 切入點 例如定義切入點表示式 execution com.sample.service.impl.execution 是最常用的切點函式,其語法如下所示 整個表示式可以分為五個部分 1 execution 表示式主體。2 第乙個 號 表示返回...

Spring AspectJ切點表示式語言定義切點

為學須剛與恆,不剛則隋隳,不恒則退。馮子鹹 spring指示器 在spring aop中,要使用aspectj的切點表示式語言來定義切點。1.spring aop支援的aspectj指示器 1 arg 限制連線點匹配引數為制定型別的執行方法。2 args 限制連線點匹配引數由指定註解標註的執行方法。...

市場切入點

切入點 通俗點,就是突破口,即解決某個問題時應該最先著手的地方。尋找市場切入點,主要從市場分析和產品定位兩方面來入手 接下來舉例說明如何尋找市場切入點,選擇物件 企鵝fm。1.市場分析 1 swot分析 其中,s strengths 是優勢,w weaknesses 是劣勢,o opportunit...