我正在挖掘Web應用程序以努力修復一些問題。該應用程序使用Tomcat,Jersey和Guice。其中一個問題發生在用於授權目的的MethodInterceptor中。這裏的方法,修剪到相關部分:獲取用於MethodInvocation而不是聲明類的實際類
public Object invoke(MethodInvocation invoc) throws Throwable {
// ...
//Check that the annotation actually exists
if(! invoc.getMethod().getDeclaringClass().isAnnotationPresent(Tool.class))
{
throw new BaseException("...");
}
// ...
}
現在的問題是,一些「面向網絡的」方法是從父類中繼承而沒有在孩子被覆蓋。如果我正確理解getDeclaringClass(),在這種情況下它將返回父類類,但我們真正想要的是子類。一些測試似乎證實了這一點 - 如果我重寫子類中的方法一切都很好,但如果我沒有在重寫中引發異常。
因此,給定一個MethodInvocation對象,是否有辦法將其追溯到實例化的「實際」類,而不是聲明該方法的類?還是需要其他一些方法?最壞的情況下,我可以根據需要對每種方法進行註釋,而不是對類進行註釋。
對不起,如果這是一個容易回答的長期問題 - 我的Java很生疏。
我找不到MethodInvocation.getThis()方法。它也不在文檔中:http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fjdt%2Fcore%2Fdom%2FMethodInvocation .html –
這是與本問題中提及的不同的軟件包/ API。我所指的類來自Guice引入的AOP類。請參閱http://aopalliance.sourceforge.net/doc/org/aopalliance/intercept/MethodInvocation.html和https://github.com/google/guice/wiki/AOP –
對不起,您對了 –