目录
1、注解的作用
java注解有两个作用:1、它不是程序的本身,可以对程序做出解释(这一点和我们的注释区别不大,比如我们的@Deprecated 它表示的是我们当前的代码已废弃或存在风险,不建议使用);2、可以被其他程序读取(比如我们的编辑器读取)。java的注解是jdk1.5以后的版本加入的功能,它的包是java.lang.annotation。对于注解我的理解是它使我们的程序更加的优雅,让我们在某种业务场景上可以更灵活方便的处理。api中我们常用的内置注解有:@Override、@Deprecated、@Surpperwarinings
2、注解的创建
下图是一个自定义注解的结构图:
我总结了注解的三个要素:元注解、关键字、格式。
元注解
它作用是负责注释其它注解,其实就是表示我们这个注解用的位置,什么时候用。以下就是四个元注解的意义:
@Documented:表示该注解会被包含在javadoc中
@Inherited:表示子类可以继续父类的注解
@Retention:表示注解使用的生命周期,它的参数是一个枚举类RetentionPolicy的某种状态值,该类有三种状态,分别是:
SOURCE(源代码中):比如我们的@Override注解
CLASS(编译期):比如我们的@Surpperwarinings注解
RUNTIME(运行时):spring中常用的注解
@Target:表示注解的使用位置,入参是ElementType的枚举值,范围详见api中的java.lang.annotation.ElementType类,这里就不做叙述了,它的作用域可以是构造器、类、包、属性、参数等等。
关键字:
@interface :创建枚举的关键字
default :默认值关键字
了解了这些东西后,其实我们可以很快的创建一个简单的自定义注解。
格式:
元注解+关键字
根据不同的业务场景,加上元注解的相关标识,定义自定义注解的使用位置
3、注解的读取
注解的读取原理是使用的反射机制,通过获取Class类中的Annotation属性,来读取该注解的值,反射的原理和读取注解的方式这里就不做描述啦,如果对反射不了解的可以去查看相关的文档,下图是一个简单的读取注解的方式: