注解
你正站在无上之巅,俯看着优雅的设计模式给你带来的江山......
注解(Annotation)又称标注,是 JDK 1.5 引入的一种注释机制。
Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。JVM 可以保留标注内容,在运行时可以获取到标注内容。当然它也支持自定义 Java 标注。
当然,注解并不止“提醒”程序员,在 APT(注解处理器)推出后,基于注解配置的应用开发成为了可能。
基本注解
java.lang 中定义了三种注解:
| 注解名 | 描述 |
|---|---|
| @Override | 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。 |
| @Deprecated | 标记过时方法。如果使用该方法,会报编译警告。 |
| @SuppressWarnings | 指示编译器去忽略注解中声明的警告。 |
java.lang.annotation 中定义了五种元注解(作用在其他注解的注解):
| 注解名 | 描述 |
|---|---|
| @Retention | 确定注解的的存活时间。可取参数有: RetentionPolicy.SOURCE(注解只停留在源代码中)、 RetentionPolicy.CLASS(注解保留到字节码文件中)、 RetentionPolicy.RUNTIME (注解在运行时仍可被捕获) |
| @Documented | 将注解中的元素包含到 Javadoc 中去 |
| @Target | 限定注解运用的场景。可取参数有: ElementType.ANNOTATION_TYPE(可以给一个注解进行注解)、 ElementType.CONSTRUCTOR(可以给构造方法进行注解)、 ElementType.FIELD(可以给属性进行注解)、 ElementType.LOCAL_VARIABLE(可以给局部变量进行注解)、 ElementType.METHOD(可以给方法进行注解)、 ElementType.PACKAGE(可以给一个包进行注解)、 ElementType.PARAMETER(可以给一个方法内的参数进行注解)、 ElementType.TYPE(可以给一个类型进行注解,比如类、接口、枚举) |
| @Inherited | 若一个超类被 @Inherited 注解过的注解进行注解的话,且其子类没有被任何注解应用的话,则该子类继承超类的注解。 |
| @Repeatable | Java 1.8 新特性! 使一个注解可以在单一实例上被多次调用(而不是覆盖)。详情请阅读外部文章。 |
关于更多信息,请访问 https://zhuanlan.zhihu.com/p/37701743。
自定义注解
注解处理器
TIP
阅读本节需要读者了解 AOP 的概念。
注解处理器(APT,Annotation Processor Tools)是 AOP 静态织入的一种原生实现。