いくつかの問題を解決するために、Webアプリケーションを調べています。アプリケーションはTomcat、Jersey、Guiceを使用します。問題の1つは、承認目的で使用されるMethodInterceptorで発生しています。関連する部分にトリミングされたメソッドは次のとおりです。
public Object invoke(MethodInvocation invoc) throws Throwable {
// ...
//Check that the annotation actually exists
if(! invoc.getMethod().getDeclaringClass().isAnnotationPresent(Tool.class))
{
throw new BaseException("...");
}
// ...
}
ここで問題となるのは、「Webに面した」メソッドの一部が、子でオーバーライドされることなく、親クラスから継承されることです。getDeclaringClass()を正しく理解していれば、この場合は親クラスが返されますが、ここで本当に必要なのは子クラスです。いくつかのテストはこれを確認しているようです-子クラスのメソッドをオーバーライドするとすべてが正常ですが、オーバーライドを入れないと例外がスローされます。
したがって、MethodInvocationオブジェクトが与えられた場合、メソッドが宣言されたクラスではなく、インスタンス化された「実際の」クラスにまでさかのぼる方法はありますか?または、他のアプローチが必要ですか?最悪の場合、クラスに注釈を付けるのではなく、必要に応じて各メソッドに注釈を付けることができます。
これが簡単な答えのための長い質問である場合は申し訳ありません-私のJavaはかなり錆びています。