是否可以使用注释通配符定义方法切入点表达式?
例如“匹配所有以‘Has’开头的注释”
尝试过:
@Pointcut("execution(@Has.* * *(*))")
@Pointcut("execution(@Has..* * *(*))")
但这不起作用。
@Pointcut("execution(@HasSpecificAnnoation * *(*))")
适用于一个特定的扩展。但这不是我需要的东西...
您的切入点存在多个潜在问题:
表达式
*(*)
仅匹配仅具有一个参数的方法。最好使用 *(..)
来匹配任意数量的参数。
表达式
@Has.*
与名为 Has
的包中的任何注释匹配,因为 .
是包或内部类分隔符。这不是你想要的。
表达式
@Has..*
与名为 Has
的包或其任何子包中的任何注释匹配,因为 ..
双点表达式旨在专门包含子包。这也不是你想要的。
您可能想要的是匹配任何包中任何注释所注释的方法,其名称以
Has
开头。正确的语法是
execution(@*..Has* * *(..))
其中
*..
匹配所有包,Has*
匹配注释类型名称的开头。
顺便说一句,如果您还想匹配类型上的这些注释而不仅仅是方法上的注释,则需要按如下方式修改切入点(请注意注释类型名称周围的括号:
execution(@*..Has* * *(..)) // match annotated methods, same as above
|| execution(* (@*..Has* *).*(..)) // match annotated types