我無法爲您擴展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