概念:
能够添加到Java代码里面的语法元数据。类,方法,参数,包都可以被注解,可以将信息元数据和程序元数据进行关联。
作用:
(1)标记,告诉编译器一些信息。
(2)编译时的动态处理,如动态生成代码。
(3)运行时动态处理,如得到注解信息。
注解的分类:
(1)标准注解:
Override(重写函数),
SupressWarning(忽略某些Warning),
Deprecated(不鼓励使用,有更好的方式);
(2)元Annotation: 是用来指定Annotation的Annotation;
@Retention;@Documented;@Inherited;@Target;
@Retention:保留时间,可选值,SOURCE(源码时),RUNTIME(运行时),CLASS(编译时)。默认CLASS,SOURCE 大都为 Mark Annotation,这类 Annotation 大都用来校验,比如 Override, SuppressWarnings。
@Documented:是否保留到Javadoc文档时。
@Target:可以用来修饰哪些程序元素,可选值,METHOD,CONSTRUCTOR,FILED
@Inherited:表示是否可以继承,为false。
** (3)自定义Annotation:** 表示根据自己的需要自定义Annotation,自定义时需要用到元Annotation。
其他分类方法:源代码时,编译时,运行时Annotation;
运行时 Annotation 解析(@Target=Method);
(1)获取class:Class.foName("*******");
(2)获取Method:clazz.getDeclaredMethod(param.class);
(3)获取注解:Mehod.getAnnotation()
(3)调用注解函数:Annotation.version()
编译时 Annotation 解析:
编译时 Annotation 指 @Retention 为 CLASS 的 Annotation,甴编译器自动解析。
(1)自定义类集成自 AbstractProcessor
(2)重写其中的 process 函数