为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_遁去的一_1 2019-10-23 12:45:22
我们可以使用注释的主要领域是什么?该功能是否可以替代基于XML的配置?
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

注释是元元对象,可用于描述其他元对象。元对象是类,字段和方法。向一个对象索要其元对象(例如anObj.getClass())称为自省。内省可以走得更远,我们可以问一个元对象其注释是什么(例如aClass.getAnnotations)。内省和注释属于所谓的反射元编程

注释需要以一种或另一种方式解释才有用。注释可以在开发时由IDE或编译器解释,也可以在运行时由框架解释。

注释处理是一种非常强大的机制,可以通过多种不同方式使用:

  • 描述元素的约束或用法:例如@Deprecated, @Override@NotNull

  • 描述元素的“性质”,例如 @Entity, @TestCase, @WebService

  • 描述元素的行为: @Statefull, @Transaction

  • 描述如何处理元素: @Column, @XmlElement

在所有情况下,都使用注释来描述元素并阐明其含义

在JDK5之前,现在需要将使用注释表示的信息存储在其他位置,并且经常使用XML文件。但是使用注释会更方便,因为它们将属于Java代码本身,因此比XML更易于操作。

注释的用法:

  • 文档,例如XDoclet

  • 汇编

  • 集成开发环境

  • 测试框架,例如JUnit

  • IoC容器,例如Spring

  • 序列化,例如XML

  • 面向方面的编程(AOP),例如Spring AOP

  • 应用程序服务器,例如EJB容器,Web服务

  • 对象关系映射(ORM),例如Hibernate,JPA

  • 还有很多...

...例如看一下Lombok项目,该项目使用批注定义了生成方法equalshashCode方法。


查看完整回答
反对 回复 2019-10-23
?
皈依舞

TA贡献1851条经验 获得超3个赞

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标准(持久性,依赖项注入,您将其命名)都使用了这种注释处理,以提供必要的元数据和配置信息。


查看完整回答
反对 回复 2019-10-23
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

注释是添加到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文件中查找你已经设置了所有的依赖注入)。

希望我给您带来了如何在不同框架中使用注释的信息。


查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 571 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信