You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义注解携带参数时Spring AOP的Advice通知不执行如何解决

问题原因及修复方案
  • 切点表达式语法错误
    你当前使用的切点表达式@Pointcut("execution(@com.annotations.AnnotationName* *(..))")存在格式问题:注解类名AnnotationName后直接拼接了通配符*,没有空格分隔,Spring会将AnnotationName*整体作为注解类名的匹配规则,无法匹配到你定义的AnnotationName注解,同时表达式缺少方法返回值的匹配位。

正确的匹配所有标注了该注解的方法的切点写法:

@Pointcut("execution(* @com.annotations.AnnotationName *.*(..))")
void someMethod() {}

如果需要在通知中直接获取注解的参数值,可以用更简洁的注解绑定写法:

@Aspect
class A{   
    @Around("execution(* *(..)) && @annotation(annotationName)")
    public Object aroundSomeMethod(ProceedingJoinPoint pjp, AnnotationName annotationName) throws Throwable
    {
        // 直接调用方法即可获取注解参数
        String str = annotationName.someString();
        boolean bool = annotationName.someBoolean();
        return pjp.proceed();
    }
}
  • 目标方法为private权限
    Spring AOP基于动态代理实现,默认只能拦截public、protected、包可见的实例方法,private方法不会被代理对象识别,自然无法触发通知。如果必须拦截private方法,需要开启AspectJ静态织入能力,否则请将目标方法的访问权限修改为非private即可。

注:你定义的注解已经配置了@Retention(RetentionPolicy.RUNTIME),运行时可被识别,这部分配置无需修改。

内容的提问来源于stack exchange,提问作者Gutiel67

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:36:04