1.元注解:用于描述注解的注解
1.@Target :描述注解能够作用的位置
1.1 ElementType取值:
- TYPE:可以作用于类上
- METHOD:可以作用于方法上
- FIELD:可以作用于成员变量上
2.@Retention:描述注解被保留的阶段
-
Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
-
Retention(RetentionPolicy.CLASS):当前被描述的注解,会保留到class字节码文件中,但是不会被JVM读取到
-
Retention(RetentionPolicy.SOURSE):当前被描述的注解,保留到源码中,不会保留到class字节码文件中
3.@Documented:描述注解是否被抽取到api文档中
4.@Inherited:描述注解是否被子类继承
package cn.annotation;
import java.lang.annotation.*;
/**
*元注解:用于描述注解的注解
*@Target :描述注解能够作用的位置
*ElementType取值:
*TYPE:可以作用于类上
*METHOD:可以作用于方法上
*FIELD:可以作用于成员变量上
*@Retention:描述注解被保留的阶段
*Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
*Retention(RetentionPolicy.CLASS):当前被描述的注解,会保留到class字节码文件中,但是不会被JVM读取到
*Retention(RetentionPolicy.SOURSE):当前被描述的注解,保留到源码中,不会保留到class字节码文件中
*@Documented:描述注解是否被抽取到api文档中
*@Inherited:描述注解是否被子类继承
*/
//表示该MyAnno3注解只能作用于类上
@Target(value = {ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnno3 {
}
package cn.annotation;
@MyAnno(value = 12,per = Person.P1,anno2 =@MyAnno2,strs = {"abc"})
@MyAnno3
public class Worker {
@MyAnno3
public String name = "aaa";
@MyAnno3
public void show(){
}
}
package cn.annotation;
//Worker类已经被MyAnno3注解了,那么子类Teacher类自动继承该注解
public class Teacher extends Worker {
}