定義過濾切入點函式時,是直接把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...