我正在审查Java Annotations如何工作并意识到它是一个类的元数据。我有一些关于自定义注释的问题:
注释如何比静态或全局类变量更有用?
你能给出一个注释有用的真实例子吗?
答案 0 :(得分:2)
1)我真的不认为“注释”,“静态变量”或“全局变量”之间存在任何共性 - 它是苹果,橘子和金橘。
2)“注释”的一个很好的例子可能是JAXWS Web服务:
在这种情况下,支持JAXWS的工具可以识别“@WebService”类和“@WebMethod”方法,以解析Java代码并从中自动生成相应的代理,存根,WSDL等。
3)以下是对“注释”的一个很好的介绍:
* http://www.developer.com/java/other/article.php/3556176/An-Introduction-to-Java-Annotations.htm
它[基于注释的开发]让我们避免编写样板文件 在许多情况下通过启用工具从中生成代码 源代码中的注释。这导致声明 编程风格,程序员说应该做什么和 工具会发出代码来执行此操作。“
答案 1 :(得分:1)
Annotations 本质上是元数据,即它们讲述了类,方法或参数,但不是它们注释的代码的一部分。类变量构成了代码本身的一部分,并且提供了一种非常不同但同样重要的目的,即存储数据以便在应用程序中使用。
一个有用的例子是@Override
注释,它告诉编译器一个方法已存在于超类中。此批注提供了编译时检查,以检查方法及其参数是否正确。
答案 2 :(得分:1)
您可以使用注释来完成面向方面编程(AOP)。您应该尝试阅读方法拦截器:尝试http://docs.jboss.org/aop/1.3/aspect-framework/examples/method-execution/methodexecution.html和http://code.google.com/p/google-guice/wiki/AOP。
答案 3 :(得分:1)
您不能将全局变量绑定到类元素(构造函数,字段,方法等)并使用反射查询这些元素。 这是一个区别。 此外,注释具有不同的保留等级:一旦被某些工具“处理”,它们就可以从字节码中删除,或者在运行时保留,以便反射。
在注释之前,人们正在使用像xdoclet这样的工具来绑定来自javadoc注释的java源代码中的一些元信息;处理这些元信息以生成周围代码(即,用于EJB中的持久性,或生成配置文件和其他源)。
答案 4 :(得分:0)
注释如何比静态或全局类更有用 变量?
来自http://en.wikipedia.org/wiki/Java_annotations#Processing:
编译Java源代码时,可以处理注释 编译器插件称为注释处理器。处理器可以生产 信息性消息或创建其他Java源文件或 资源,而这些资源又可以被编译和处理 修改带注释的代码本身。 Java编译器有条件地 如果注释具有a,则将注释元数据存储在类文件中 CLASS或RUNTIME的RetentionPolicy。后来,JVM或其他程序 可以查找元数据以确定如何与之交互 程序元素或改变他们的行为。
答案 5 :(得分:0)
How are annotations any more useful then a static or global class variable?
他们首先不是邪恶的。
答案 6 :(得分:0)
在许多情况下,许多工具利用注释来帮助将对象映射到其他组件。 ORM将DB中的每个字段映射到您的对象等?