【问题标题】:Where does the processing of an annotation happen?注释的处理发生在哪里?
【发布时间】:2012-02-21 12:24:38
【问题描述】:

我最近一直在阅读注释,我有点困惑。我使用了注释@NotNull,但我真的不知道它如何检查变量是否不为空。我在代码中的任何地方都没有看到任何检查 null 值的内容。这是有道理的,因为它是一个接口,所以实际处理发生在哪里,为什么代码中没有指定这个位置?我看到的例子通常只是做一个带值的注释,但不做任何其他事情,所以我对实现的位置感到困惑。

【问题讨论】:

    标签: java annotations notnull


    【解决方案1】:

    注解只是一种元数据,不多不少。 当您想指定有关该类的一些详细信息时,您可以在其上添加注释。 (在某种程度上)将它们视为旧的众所周知的 XML 定义元数据的替代方法。

    现在,很明显有人读取了您的 XML 并运行了使用元数据生成某些内容的代码。注释也是如此:注释所属的框架负责读取注释并使用此信息进行操作。对于@NotNull,它的hibernate-validator 项目。 java公开的API允许通过反射访问注解中的信息(java.lang.ClassMethodField等类)。因此,在休眠验证器内部的某个地方,有一段代码会进入您的类,通过反射读取注释并检查该类是否遵守这些注释。 这些注释通常具有保留策略“运行时”,这意味着它们保留在字节码中并与携带这些注释的类一起加载。

    还有一些注解应该由 Java 编译器处理。比如@Deprecated@SuppressWarnings等等。有这样的注解的好处是可以在编译阶段发现一些代码问题。

    您也可以在编译阶段放置注释处理器并“插入”它们,但情况完全不同。

    希望这能澄清一下注解的用法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多