注释的处理在哪里发生?

时间:2012-01-29 06:53:09

标签: java annotations notnull

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

1 个答案:

答案 0 :(得分:5)

注释只是一个元数据,不多也不少。 如果要指定有关该类的一些详细信息,请在其上添加注释。 将它们(在某种程度上)视为旧的众所周知的XML方法来定义元数据的替代方案。

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

还有一些应该由Java编译器处理的注释。与@Deprecated@SuppressWarnings等相同。拥有此类注释的好处是您可以在编译阶段找到一些代码问题。

您还可以在编译阶段放置注释处理器并“插入”它们,但这是完全不同的故事。

希望这能澄清注释的用法