- 在学习java相关的框架时,经常看到框架开发者的自定义注解,于是查询了解了一下注解,于是写篇博客记录有关元注解的知识简单总结一下。
java注解简介
-
Java注解(Annotation)又称为标注,是JDK5.0引入的一种机制;Java中的类、方法、变量、参数、包都可以被标注。
-
Java注解大致可以分为三类:元注解,基本内置注解,自定义注解
-
元注解,即JDK中自带,用来标注(注解)其他注解的注解。一般常用于标注自定义注解。
元注解
-
JDK5.0+定义了4个标准的元注解:@Target、@Retention、@Documented、@Inherited
-
@Target
- 作用:用于标注注解,规定被标注注解所修饰的Java元素类型。通俗讲,就是被标注的注解可以用在什么地方,比如类、方法、属性
- 属性(value)可以取值ElementType.xxx(xxx为下列枚举变量):
- CONSTRUCTOR : 用于描述构造器
- FIELD : 用于描述域(成员变量、枚举常量)
- LOCAL_VARIABLE : 用于描述局部变量
- METHOD : 用于描述方法
- PACKAGE : 用于描述包
- PARAMETER : 用于描述参数
- ANNOTATION_TYPE : 用于描述 注解类
- TYPE : 用于描述类、接口或enum声明(枚举类)
- TYPE_PARAMETER : 类型参数,JDK 1.8 新增
- TYPE_USE : 使用类型的任何地方,JDK 1.8 新增
- 注意:如果一个注解没有被@Target标注,则此注解可以用于除了TYPE_PARAMETER和TYPE_USE以外的任何地方。
-
@Retention
- 作用:用于标注注解,使被标注的注解在注释说明保留。通俗讲,就是被标注的注解在具体使用时可以保留到什么时候
- 属性(value)可以取值RetentionPoicy.xxx(xxx为下列枚举常量):
- SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略
- CLASS —— 这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略
- RUNTIME —— 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用
-
@Documented
- 作用:用于标注注解,Javadoc工具会将此注解标记元素的注解信息包含在javadoc中。默认情况注解信息不会包含在Javadoc中。该注解没有成员
-
@Inherited
- 作用:用于标注注解,被标注的注解在使用时修饰的类,它的子类会继承父类的该注解
- 注意:类并不从它所实现的接口继承被Inherited标注的注解,对于方法同理。
-
参考文章/博客: