Spring Aop Pointcut切點表示式

2021-10-08 14:13:16 字數 3006 閱讀 6992

格式:

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 返回值型別 包名 類名 方法名可以用 代表任意 包名與類名之間有個.代表當前包下的類,兩個點....