我正在研究一个 Web 应用程序以解决一些问题。该应用程序使用 Tomcat、Jersey 和 Guice。其中一个问题发生在用于授权目的的 MethodInterceptor 中。这是方法,修剪到相关部分:
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 相当生疏。