【问题标题】:Define number of parameters in AspectJ pointcut在 AspectJ 切入点中定义参数数量
【发布时间】:2026-01-28 22:05:02
【问题描述】:

我想定义一个切入点,其中唯一重要的一点是目标方法的参数数量。例如,我有以下切入点定义;

@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)
           && execution(* pkg..*.*(pkg.Obj1, pkg.Obj2, pkg.Obj3))")

我不希望硬编码预期的参数类型,但我只希望为这个切入点获取只有三个参数的方法。如何仅通过上述切入点应该有三个参数的信息来实现这一点,而不指定参数的详细信息?

例如我希望它匹配;

// in package pkg.*
@RequestMapping
public test(ObjX objX, ObjY objY, ObjZ objZ) {
   //etc
}

但不符合以下;

// also in package pkg.*
@RequestMapping
public test(ObjX obj) {
   //etc
}

// also in package pkg.*
@RequestMapping
public test(ObjX objX, ObjY objY) {
   //etc
}

// also in package pkg.*
@RequestMapping
public test(ObjX objX, ObjY objY, ObjZ objZ, ObjQ objQ) {
   //etc
}

【问题讨论】:

    标签: java aop aspectj


    【解决方案1】:

    我找到了,实现的方法是给*作为参数;

    @Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)
               && execution(* xxx.yyy.zzz..*.*(*, *, *))")
    

    * 类似的用法用于返回类型、其他类和方法名称。

    【讨论】: