目录
一、什么是注解?
java注解(Annotation)是jdk5.0引入的一种注释机制。java中的类、方法、变量、参数和包等都可以被注解,java注解可以通过反射获取标注内容。在编译器生成类文件时,注解可以被嵌入到字节码中 。java虚拟机可以保留注解内容,在运行时可以获取到注解内容。支持java标注。
二、注解的架构
一个注解(Annotation)有唯一的RetentionPolicy属性和若干个ElementType属性。
1.Annotation是个接口。
2.RetentionPolicy是Enum枚举类型,用来指定Annotation的策略。
3.ElementType是Enum枚举类型,用来指定Annotation的类型。
不同RetentionPolicy类型的Annotation的作用域不同。
1.SOURCE:Annotation仅存在于编译器处理期间,编译器处理完后,该Annotation就没用了。
2.CLASS:编译器将Annotation存储于类对应的.class文件中(默认值)
3. RUNTIME:编译器将Annotation存储于class文件中,并且可由JVM读取。
不同的ElementType类型的Annotation修饰的类型不同
1.TYPE:类、接口(包括注释类型)、枚举声明
2.FIELD:字段声明
3.METHOD:方法
4.PARAMETER:参数
5.CONSTRUCTOR:构造方法
6.LOCAL_VarIABLE:局部变量
7.ANNOTATION_TYPE:注释类型
8.PACKAGE:包
三、java自带的Annotation
此部分内容请参照java注解 -- java自带的注解_笨不拉几的菜鸟的博客-CSDN博客
四、Annotation定义
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface MyAnnotation {
}
@interface
1.定义Annotation时,@interface是必须的
2.该注解意味着它实现了java.lang.annotaion.Annotation接口,即成为了一个Annotation
3.Annotation接口的实现细节都由编译器完成。
4.使用@interface定义注解后,该注解不能继承其他的注解或者接口。
@Documented
1.类和方法的Annotation在缺省情况下是不会出现在javadoc中的,如果使用@Documented修饰该Annotation,则表示该注解可以出现在javadoc中。
2.定义Annotation时,@Documented可有可无,若没有定义,则Annotation不会出现在Javadoc中
@Target
1.@Target用来指定Annotation的类型属性ElementType(可选值见文章上方)
2.定义Annotation时,@Target可有可无,若有@Target,则该Annotation只能用于它所指定的地方,若没有@Target,则该Annotation可以用于任何地方。
@Retention
1.@Retention用于指定Annotation的策略属性RetentionPolicy(可选值见文章上方)
2.定义Annotation时,@Retention可有可无,若没有@Retention,则默认是Retention.CLASS
@Inherited
1.控制父类类上的注解能否被子类继承
2.若父类上的注解使用了@Inherited,则子类可以继承父类中的该注解