@Pointcut的切入点表达式
@Pointcut
的切入点表达式用于指定哪些方法会被拦截,它是 AOP 中非常重要的一部分。切入点表达式的语法由以下几部分组成:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
各部分含义如下:
modifiers-pattern
:指定方法的修饰符,如public
、private
、protected
、*
(匹配所有修饰符)等。ret-type-pattern
:指定方法的返回类型,如void
、*
(匹配所有返回类型)等。declaring-type-pattern
:指定方法所属的类的类型,可以使用包名、类名等信息来匹配。name-pattern
:指定方法的名称,可以使用通配符来匹配,如*Service
匹配所有以 “Service” 结尾的方法名。param-pattern
:指定方法的参数列表,可以使用通配符来匹配。throws-pattern
:指定方法可能抛出的异常。
以下是一些切入点表达式的示例:
-
匹配所有公共方法:
execution(public * *(..))
-
匹配指定包下的所有方法:
execution(* com.example.service.*.*(..))
-
匹配指定包及其子包下的所有方法:
execution(* com.example..*.*(..))
-
匹配指定类中所有方法:
execution(* com.example.service.UserService.*(..))
-
匹配指定返回类型的方法:
execution(* com.example.service.UserService.get*(..))
-
匹配指定参数类型的方法:
execution(* com.example.service.UserService.*(Long))
-
匹配指定异常类型的方法:
execution(* com.example.service.UserService.*(..) throws java.lang.Exception)
-
匹配指定方法名的方法:
execution(* *Service.doSomething(..))
这些是一些基本的示例,实际应用中你可以根据需要结合具体情况来编写切入点表达式。