定义AspectJ切入点中的参数数量

时间:2017-03-29 04:45:24

标签: java aop aspectj

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

@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
}

1 个答案:

答案 0 :(得分:0)

我找到了,实现这一目标的方法是将*作为参数;

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

对于返回类型使用*的类似用法,其他类&方法名称。