00014.08 自定义注解和元注解

一、自定义注解 和 元注解是什么?

首先,回顾一下,我们说的一个完整的注解由三部分组成,如下图,实际上我们前面所详细探讨过的,不管是@Override还是@Test都没有要去你声明,仔细想想,我们自己有去声明吗?
00014.08 自定义注解和元注解
系统注解 是JDK帮你声明的
@Test注解是JUnit帮你声明的

还有,读取也不是你来读取的,系统注解像@Override 是编译器帮你读取的,JUnit注解像@Test是@JUnit框架帮你读取的
这次我们所讲的自定义注解和元注解,就需要我们自己去声明、使用、和读取
那么三步我们都给它做了,应该如何做呢?

二、使用

1、注释的声明

语法格式:
[修饰符] @interface 注释名{

}

从语法格式中,我们可以看出,在Java中,是吧注释看成接口的
把枚举看成类
00014.08 自定义注解和元注解
注释的三个完整步骤
(1)声明
(2)使用
(3)读取

那么我们还剩下最后一步,读取
00014.08 自定义注解和元注解
读取不理解,我们想看下元注解是什么说不定就能豁然开朗了

二、元注解

元注解 就是 注解注解的注解
有点绕,自己理解一下,换句话说,就是加在注解上面的注解,叫元注解
00014.08 自定义注解和元注解

1、@Target 元注解

@Target 用于标记这个注解可以用于什么位置
它由ElementType枚举常量对象来决定
例如 TYPE,FIELD,CONSTRUCTOR等10个位置

00014.08 自定义注解和元注解
如果想方法和类都能用要怎么写呢?
00014.08 自定义注解和元注解
00014.08 自定义注解和元注解

2、 @Retention

跟生命周期有关
00014.08 自定义注解和元注解
00014.08 自定义注解和元注解
@Retention 是标记这个注解可以滞留到什么阶段
它由 RetentionPolicy的3个常量对象来指定
SOURCE,CLASS,RUNTIME
SOURCE : 源代码阶段.java ————只能被编译器读取
CLASS : 字节码阶段 ————
RUNTIME : 运行时阶段,运行JVM ——

3、@Documented

标记某个注解是否可以被javadoc.exe读取到API

4、@Inherited

标记这个注解是否可以被子类继承

总结

@Target 、 @Retention是重点