在 Spring AOP 中,切入點表達式用于定義代理對象的方法
通配符:
*
:匹配任意數量的字符,但不包括.
。例如,com.example.*
將匹配 com.example
包下的所有類。..
:匹配任意數量的字符,包括.
。例如,com.example..*
將匹配 com.example
包及其子包下的所有類。類名和方法名:
com.example.MyClass.myMethod()
將匹配 com.example.MyClass
類中的 myMethod()
方法。參數匹配:
()
:匹配無參數的方法。(..)
:匹配任意數量和類型的參數。(String, int)
:匹配具有兩個參數(一個字符串和一個整數)的方法。返回值匹配:
int com.example.MyClass.myMethod()
將匹配返回值為整數的 myMethod()
方法。注解匹配:
@annotation(com.example.MyAnnotation)
:匹配使用了 com.example.MyAnnotation
注解的方法。@within(com.example.MyAnnotation)
:匹配使用了 com.example.MyAnnotation
注解的類中的所有方法。切入點表達式組合:
&&
:表示邏輯與,用于組合多個切入點表達式。例如,execution(* com.example.*.*(..)) && @annotation(com.example.MyAnnotation)
將匹配 com.example
包下使用了 com.example.MyAnnotation
注解的方法。||
:表示邏輯或,用于組合多個切入點表達式。例如,execution(* com.example.MyClass.*(..)) || execution(* com.example.AnotherClass.*(..))
將匹配 com.example.MyClass
和 com.example.AnotherClass
類中的所有方法。!
:表示邏輯非,用于排除某些切入點表達式。例如,execution(* com.example.*.*(..)) && !execution(* com.example.MyClass.*(..))
將匹配 com.example
包下的所有方法,但排除 com.example.MyClass
類中的方法。以下是一個簡單的切入點表達式示例:
@Pointcut("execution(* com.example.MyClass.*(..))")
public void myPointcut() {}
這個切入點表達式將匹配 com.example.MyClass
類中的所有方法。