最近、Java Web サービスの調査を開始したところ、次の不可解な情報が見つかりました。
@Consumes アノテーションを持つインターフェースで定義されたメソッドがあり、そのインターフェースを実装すると、@Consumes が継承されているかのように、サービスは正しく機能します。
ただし、さまざまな記事とここを読むと、注釈は継承されていないようです。
これを確認するために、次のテストをノックアップしました。
interface ITestAnnotationInheritance {
@Consumes
void test();
}
class TestAnnotationInheritanceImpl implements ITestAnnotationInheritance {
@Override
//@Consumes // This doesn't appear to be inherited from interface
public void test() {}
public static void main(String[] args) throws SecurityException, NoSuchMethodException {
System.out.println(TestAnnotationInheritanceImpl.class.getMethod("test").getAnnotation(Consumes.class));
}
}
結果は次のとおりです。
null
TestAnnotationInheritanceImpl クラスの @Consumes のコメントを外すと、出力は次のようになります。
@javax.ws.rs.Consumes(value=[*/*])
これはアノテーションが継承されていないことを証明していますが、なぜ Web サービスは正常に動作するのでしょうか?
どうもありがとう