这篇博客,主要讲解关于注解的一些基本知识,包括注解的概念、分类、作用,常见注解的定义及其解析方式等。
Annotation的概念
1. 概念
关于Annotation注解的概念,我们可以看下官方的解释:
Annotations, a form of metadata;
provide data about a program that is not part of the program itself.
Annotations have no direct effect on the operation of the code they annotate
Annotation注解是Java中的一种元数据,它可以往源代码中添加额外的数据,并且对注解的代码无直接影响;包名、类、成员方法、成员属性、参数都可以被注解。
2. 作用
注解可以让我们的代码更加简洁,并且增加代码的复用性,避免冗余代码。
如果细分起来,注解主要有3个作用:
编译时标记:在编译时,通过标记代码,来提示信息、检查错误
编译时处理:在编译时,通过构建代码,来动态生成一些额外的代码、或者Java/XML等文件
运行时处理:在运行时,我们可以动态的获取注解信息
3. 分类
1. 标准Annotation
标准Annotation是指Java自带的Annotation。
eg:@Override[重写]、@Deprecated[不鼓励使用]、@SuppressWarnings[忽略警告]等。
2. 元Annotation
元Annotation是指注解Annotation的Annotation。
eg:@Retention, @Target, @Inherited, @Documented等。
3. 自定义Annotation
我们可以利用元Annotation来自定义一些自己的Annotation。
元Annotation
元Annotation是指注解Annotation的Annotation。
@Documented:Annotation是否会保存到JavaDoc文档中
@Inherited:Annotation是否可以被继承,默认是false
@Target(ElementType[] types):Annotation可以用来注解哪些元素
ElementType:元素类型,比如类、方法、变量、参数等
@Retention(RetentionPolicy ploicy):Annotation的保留策略
RetentionPolicy.SOURCE:Annotation仅保留在java源码中
- 大都为Mark Annotation,做一个警示、校验的作用
RetentionPolicy.CLASS:Annotation保留在java源码、class文件中
- 默认的保留策略,一般配合Processor注解处理器,在构建时动态生成代码
RetentionPolicy.RUNTIME:Annotation保留在java源码、class文件、运行时
- 与CLASS的区别是,这类Annotation在运行时会被加载到JVM中,因此我们可以在程序运行的过程中动态获取到Annotation的相关信息
自定义Annotation
我们先来看一下一个最为基础的Annotation示例代码(这是