官方解释:java
Java 注解用于为 Java 代码提供元数据。做为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上能够用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。git
我的理解:github
注解≈标签数组
咱们先不谈如何实现注解,咱们从需求出发,先看看注解该如何使用。安全
注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。而咱们经过反射获取注解时,返回的是Java运行时生成的动态代理对象$Proxy1。经过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。ide
(1)元注解函数
@Retention(RetentionPolicy.RUNTIME)
Javadoc
文档中(2)Java 内置注解代理
unchecked
警告(1.7引入)Runnable
接口就是使用了该注解)(3)自定义注解code
定义一个注解对象
// 经过 @interface 关键字进行定义 // 形式相似于接口,区别在于多了一个 @ 符号 public @interface MyAnnotation { // 注解的属性 = 成员变量 // 注解只有成员变量,没有方法 // 注解@MyAnnotation中有2个属性:id 和 msg int id(); String msg() default "Hi" ; // 说明: // 注解的属性以 “无形参的方法” 形式来声明 // 方法名 = 属性名 // 方法返回值 = 属性类型 = 8 种基本数据类型 + 类、接口、注解及对应数组类型 // 用 default 关键值指定 属性的默认值,如上面的msg的默认值 = ”Hi“ }
Demo地址以下:
https://github.com/Taoey/DAS/tree/master/JavaBase/src/main/java/annotation