Java中如何在哪里使用注释?

我们可以使用注释的主要领域是什么?该功能是否可以替代基于XML的配置?



qq_遁去的一_1
浏览 572回答 3
3回答

FFIVE

注释是元元对象,可用于描述其他元对象。元对象是类,字段和方法。向一个对象索要其元对象(例如anObj.getClass())称为自省。内省可以走得更远,我们可以问一个元对象其注释是什么(例如aClass.getAnnotations)。内省和注释属于所谓的反射和元编程。注释需要以一种或另一种方式解释才有用。注释可以在开发时由IDE或编译器解释,也可以在运行时由框架解释。注释处理是一种非常强大的机制,可以通过多种不同方式使用:描述元素的约束或用法:例如@Deprecated, @Override或@NotNull描述元素的“性质”,例如 @Entity, @TestCase, @WebService描述元素的行为: @Statefull, @Transaction描述如何处理元素: @Column, @XmlElement在所有情况下,都使用注释来描述元素并阐明其含义。在JDK5之前,现在需要将使用注释表示的信息存储在其他位置,并且经常使用XML文件。但是使用注释会更方便,因为它们将属于Java代码本身,因此比XML更易于操作。注释的用法:文档,例如XDoclet汇编集成开发环境测试框架,例如JUnitIoC容器,例如Spring序列化,例如XML面向方面的编程(AOP),例如Spring AOP应用程序服务器,例如EJB容器,Web服务对象关系映射(ORM),例如Hibernate,JPA还有很多......例如看一下Lombok项目,该项目使用批注定义了生成方法equals或hashCode方法。

皈依舞

Java的注释有多种应用程序。首先,它们可能由编译器(或编译器扩展)使用。考虑例如Override注释:class Foo {    @Override public boolean equals(Object other) {        return ...;    }}这实际上是内置在Java JDK中的。如果标记了某些方法,则编译器将发出错误信号,该错误不会覆盖从基类继承的方法。为了避免常见的错误,此批注可能会很有用,因为您实际上打算覆盖某个方法,但这样做却失败了,因为方法中给定的签名与被覆盖的方法的签名不匹配:class Foo {    @Override public boolean equals(Foo other) {  // Compiler signals an error for this one        return ...;    }}即将发布的JDK7将允许任何类型的注释。已经有建议将此功能用于诸如NotNull之类的编译器注释,例如:public void processSomething(@NotNull String text) {    ...}这可能会使编译器警告您有关变量和空值使用不当/未经检查的情况。注释的另一个更高级的应用程序涉及在运行时进行反射和注释处理。这就是(我认为)当您将注释称为“基于XML的配置的替换”时所想到的。这是一种注释处理,例如,各种框架和JCP标准(持久性,依赖项注入,您将其命名)都使用了这种注释处理,以提供必要的元数据和配置信息。

德玛西亚99

注释是添加到Java源文件中的元数据(关于数据的数据)的一种形式。框架广泛使用它们来简化客户端代码的集成。我想到了几个真实的例子:JUnit 4-将@Test注释添加到要运行JUnit运行器的每个测试方法中。设置测试也有其他注释(如@Before和@BeforeClass)。所有这些都由JUnit运行器处理,JUnit运行器相应地运行测试。您可以说它是XML配置的替代品,但是注释有时更强大(例如,它们可以使用反射),并且它们更接近于它们所引用的代码(@Test注释就在测试方法之前,因此目的是该方法的含义很明确-也可以用作文档)。另一方面,XML配置可能比注解更复杂,并且可以包含更多的数据。Terracotta-同时使用注释和XML配置文件。例如,@Root注释告诉Terracotta运行时已注释的字段是根,并且其内存应在VM实例之间共享。XML配置文件用于配置服务器并告诉它要检测的类。Google Guice-一个示例就是@Inject注释,将其应用于构造函数后,Guice运行时将根据定义的注入器为每个参数查找值。该@Inject注释将是十分困难的使用XML配置文件进行复制,并且它靠近它引用到构造是非常有用的(想象一下,搜索到一个巨大的XML文件中查找你已经设置了所有的依赖注入)。希望我给您带来了如何在不同框架中使用注释的信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java