元数据是一种将一些补充信息添加到源代码的方法。此信息称为注解,不会更改程序的运行方式。其他工具(例如源代码生成器)可以使用此元数据在运行时生成其他代码。或者它将由依赖注入框架(例如Spring框架)使用。
注解可以附加到类,方法等上。要创建注解,我们使用interface关键字并在其@前面添加符号。该@符号将告诉编译器它通过注解进行某些处理。
现在让我们来看一个简单注解的代码HelloAnnotation。
package org.nhooo.example.lang.annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface HelloAnnotation { String value(); String greetTo(); }
所有注解都扩展了java.lang.annotation.Annotation接口,这意味着它java.lang.annotation.Annotation是所有注解的超级接口
注解必须具有RetentionPolicy,它将成为注解的范围,此时注解将被忽略或丢弃。该值是RetentionPolicy.SOURCE,RetentionPolicy.CLASS和RetentionPolicy.RUNTIME。如果未定义保留策略,它将使用默认的保留策略RetentionPolicy.CLASS。
带有RetentionPolicy.SOURCE保留策略的注解将仅保留在源代码中,编译器在编译类时可使用该注解,然后将其丢弃。该RetentionPolicy.CLASS保留策略将存储在编译过程中的类文件的注解,但不会在运行时可用。和RetentionPolicy.RUNTIME保留策略将存储的编制过程中的类文件的注解,它还可在运行时提供给JVM。
在上面的示例中,您还看到HelloAnnotation拥有两个成员value()和greetTo()。注解中仅包含方法声明,而没有实现主体。