文章目录
元注解(meta-annotation):用于描述注解的注解
元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:
1.@Target
2.@Retention
3.@Documented
4.@Inherited
这些类型和它们所支持的类在java.lang.annotation包中可以找到。
@Target:
@Target :描述注解能够作用的位置
ElementType取值:
TYPE :可以作用于类上本
METHOD: 可以作用于方法上
FIELD :可以作用于成员变量上
@Target
说明了Annotation所修饰的对象范围
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
1.CONSTRUCTOR
:用于描述构造器
2.FIELD
:用于描述域
3.LOCAL_VARIABLE
:用于描述局部变量
4.METHOD
:用于描述方法
5.PACKAGE
:用于描述包
6.PARAMETER
:用于描述参数
7.TYPE
:用于描述类、接口(包括注解类型) 或enum声明
@Retention:
@Retention :描述注解被保留的阶段
@Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
@Retention
定义了该Annotation被保留的时间长短
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
取值(RetentionPoicy)有:
1.SOURCE
:在源文件中有效(即源文件保留)
2.CLASS
:在class文件中有效(即class保留)
3.RUNTIME
:在运行时有效(即运行时保留)
@Documented:
@Documented :描述注解是否被抽取到api文档中
@Documented
用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
@Inherited:
@Inherited :描述注解是否被子类继承
@Inherited
元注解是一个标记注解,@Inherited
阐述了某个被标注的类型是被继承的。
@Inherited
:允许子类继承父类的注解。
使用该注解的注解父类的子类可以继承父类的注解。
举例:
MyAnno3.java
import java.lang.annotation.*;
@Target(value={ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})//表示该MyAnno3注解能作用于类上、方法上、成员变量上
@Retention(RetentionPolicy.RUNTIME)
@Documented //能把注解写进doc文档
@Inherited //能自动被子类继承
public @interface MyAnno3 {
}
Worker.java
@MyAnno3
public class Worker {
@MyAnno3
public String name = "aaa";
@MyAnno3
public void show(){}
}