我无法为您扩展AspectJ语法,但我可以提供解决方法。但首先让我解释一下为什么在切入点中无法按照args
的定义做你想做的事情:因为如果你在方法签名的任何地方匹配你的EhealthSession
参数,AspectJ应该如何处理签名包含多个参数的情况那个班? eheSess
的含义不明确。
现在,解决方法:它可能会变慢 - 多少取决于您的环境,只是测试它 - 但您可以让切入点匹配所有可能的方法,而不管它们的参数列表如何,然后让建议找到您需要的参数通过检查参数列表:
pointcut permissionCheckMethods() : execution(public * *(..));
before() throws AuthorizationException : permissionCheckMethods() {
for (Object arg : thisJoinPoint.getArgs()) {
if (arg instanceof EhealthSession)
check(arg, thisJoinPointStaticPart.getSignature());
}
}
PS:也许你可以通过within(SomeBaseClass+)
或within(*Postfix)
或within(com.company.package..*)
范围缩小,以便不建议适用于整个宇宙。
匹配任何任意位置是不可能的。 – 2017-10-03 20:47:46