格式:
execution
( modifier-pattern?
//修飾符
ret-type-pattern //返回型別
declaring-type-pattern?
//方法模式
name-
pattern
(param-pattern)
//引數模式
throws
-pattern?
//異常模式
)
?表示可以省略整個表示式可以分為五個部分:
eg:
@pointcut
("execution(* com.sample.service.impl..*.*(..))"
)
2 within()
匹配某個類或者某個包下的所有方法:
//匹配productservice類中的所有方法
@pointcut
("within(com.sample.service.productservice)"
)public
void
matchtype()
//匹配sample包及其子包下所有類的方法
@pointcut
("within(com.sample..*)"
)public
void
matchpackage
()
3.1 @annotation
匹配註解有adminonly註解的方法:
@pointcut
("@annotation(com.sample.security.adminonly)"
)public
void
demo1
()
3.2 @within
關注的是呼叫的方法所在的類。判斷被呼叫的方法所屬的類中是否宣告了註解repository,如果有,會被攔截
@pointcut
("@within(org.springframework.stereotype.repository)"
)public
void
demo3
()
3.3 @target
關注的是被呼叫的物件。判斷被呼叫的目標物件中是否宣告了註解repository,如果有,會被攔截。
@pointcut
("@target(org.springframework.stereotype.repository)"
)public
void
demo3
()
3.4 @args
下面的5.2 arg一致。
匹配傳入引數的類標註有repository註解的方法
@pointcut
("@args
(org.springframework.stereotype.repository)
public
void
demo3
()
this用來匹配的連線點所屬的物件引用是某個特定型別的例項,target用來匹配的連線點所屬目標物件必須是指定型別的例項;那麼這兩個有什麼區別呢?原來aspectj在實現**時有兩種方式:
this指示符就是用來匹配基於cglib的**類,通俗的來講就是,如果當前要**的類物件沒有實現某個介面的話,則使用this;
target指示符用於基於jdk動態**的**類,通俗的來講就是如果當前要**的目標物件有實現了某個介面的話,則使用target.:
public
class
foodao
implements
bardao
比如在上面這段**示例中,spring aop將使用jdk的動態**來實現切面程式設計,在編寫匹配這型別的目標物件的連線點表示式時要使用target指示符, 如下所示:
@pointcut
("target(org.baeldung.dao.bardao)"
)
如果foodao類沒有實現任何介面,或者在spring aop配置屬性:proxytargetclass設為true時,spring aop會使用基於cglib的動態位元組碼技為目標物件生成乙個子類將為**類,這時應該使用this指示器:
@pointcut
("this(org.baeldung.dao.foodao)"
)
5.1 execution//匹配所有以find開頭,且只有乙個long型別引數的方法
@pointcut
("execution(* *..find*(long))"
)public
void
argdemo1()
//匹配所有以find開頭,且第乙個引數型別為long的方法
@pointcut
("execution(* *..find*(long, ..))"
)public
void
argdemo2
()
5.2 arg// 匹配引數型別com.user的方法
@pointcut
("args(com.user)"
)
args
(type1,type2,typen)
// 匹配第乙個引數為com.user的方法
@pointcut
("args(com.user,..)"
)
Spring 切點表示式
摘要 spring中的aspectj切點表示式函式 切點表示式函式就像我們的gps導航軟體。通過切點表示式函式,再配合萬用字元和邏輯運算子的靈活運用,我們能很好定位到我們需要織入增強的連線點上。經過上面的鋪墊,下面來看看springz中支援的切點表 spring中的aspectj切點表示式函式 切點...
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 返回值型別 包名 類名 方法名可以用 代表任意 包名與類名之間有個.代表當前包下的類,兩個點....