1.Annotation的概念
注解是一种可以添加到Java源代码的元数据.
类,方法,变量,参数,包都可以被注解.
注解对注解的代码并没有直接的影响.
注解仅仅是个标记.注解之所以起作用是对其解析后做了相应的处理
2.Annotation分类
标准Annotation
标准Annotation是指Java内置的三个Annnotaion:
@Override:用于修饰此方法覆盖了父类的方法.
@Deprecated:用于修饰已经过时的方法.
@SuppressWarnnings:用于通知java编译器禁止特定的编译警告.
元Annotation(注解的注解)
元Annotation是用来定义Annotation的Annotation
元Annotation可以定义Annotation的作用范围,使用在什么元素上等
元注解共有四种@Retention, @Target, @Inherited, @Documented
自定义Annotation
3.Annotation作用
格式检查:告诉编译器信息,比如被@Override标记的方法如果不是父类的某个方法,IDE会报错;
减少配置:运行时动态处理,得到注解信息,实现代替配置文件的功能;
减少重复工作:比如第三方框架xUtils,通过注解@ViewInject减少对findViewById的调用,类似的还有(JUnit、ActiveAndroid等);
4.元注解
上文提到的四个注解:@Documented、@Retention、@Target、@Inherited就是元注解,它们的作用是负责注解其它注解,主要是描述注解的一些属性,任何注解都离不开元注解(包括元注解自身,通过元注解可以自定义注解),元注解的用户是JDK,JDK已经帮助我们实现了这四个注解的逻辑。这四个注解在JDK的java.lang.annotation包中。
5.自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。