Я не могу расширить синтаксис AspectJ для вас, но могу предложить обходной путь. Но сначала позвольте мне объяснить, почему невозможно сделать то, что вы хотите, с определением args
в pointcut: потому что, если вы хотите сопоставить свой параметр EhealthSession
в любом месте в сигнатуре метода, как AspectJ должен обрабатывать случай, когда сигнатура содержит несколько параметров этого класса? Значение eheSess
будет неоднозначным.
Теперь обходной путь: он может быть медленнее - насколько это зависит от вашей среды, просто протестируйте его - но вы можете просто сделать так, чтобы pointcut соответствовал всем потенциальным методам независимо от их списка параметров, а затем позволить совету найти нужный параметр с помощью проверка списка параметров:
pointcut permissionCheckMethods() : execution(public * *(..));
before() throws AuthorizationException : permissionCheckMethods() {
for (Object arg : thisJoinPoint.getArgs()) {
if (arg instanceof EhealthSession)
check(arg, thisJoinPointStaticPart.getSignature());
}
}
P.S .: Может быть, вы можете сузить фокус с помощью within(SomeBaseClass+)
или within(*Postfix)
или within(com.company.package..*)
, чтобы не применять этот совет ко всей вселенной.