我最近开始研究 Java Web Services,发现以下令人费解的问题:
如果我在具有@Consumes 注释的接口中定义了一个方法,然后我实现了该接口,则该服务可以正常工作,就好像@Consumes 是继承的一样。
但是,从阅读各种文章和here来看,注释似乎没有被继承。
我敲了以下测试来检查这一点:
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 服务怎么能正常工作呢?
非常感谢