Spring AOP 切入点表达式详解
在 Spring AOP 的配置里,切入点表达式(Pointcut Expression)是核心。它决定了哪些连接点会被增强处理。下面梳理几种常用写法及逻辑组合方式。
基础执行表达式
execution 是最常用的匹配器,用于定位方法执行。
// 匹配任意公共方法的执行
execution(public * (*))
// 匹配以 set 开头的方法
execution(set(*))
// 匹配特定接口的所有方法
execution(com.xyz.service.AccountService.*)
// 匹配 service 包及其子包下的任意类方法
execution(* com.xyz.service..*)
注意包路径的写法,.. 表示当前包及所有子包。
逻辑组合
多个表达式之间可以使用逻辑运算符进行组合:
||或or:满足其一即可&&或and:必须同时满足!:取反
例如,同时匹配 Controller 和 RestController 注解的类:
@Pointcut("@within(org.springframework.stereotype.Controller) || @within(org.springframework.web.bind.annotation.RestController)")
public void controllerPointcut() {}
注解相关切入点
除了方法签名,还可以基于注解来匹配。
- @within:匹配目标类上存在指定注解的所有方法。
- @annotation:匹配当前执行方法本身带有指定注解。
- @target:匹配目标对象类上声明了指定注解的方法(接口上声明无效)。
- @args:匹配方法参数运行时持有指定注解的情况。
这些注解通常需要使用全限定名。在实际项目中,建议根据业务场景灵活组合,避免过度复杂的表达式影响性能。

