自定义注解
概述
通常自定义注解需要@Target @Retention @Inherited @Documented这四个注解修饰
@Target
@Target:注解的作用目标,就是这个自定义注解可以放在程序的那个部分@Target(ElementType.TYPE)——接口、类、枚举、注解
@Target(ElementType.FIELD)——字段、枚举的常量
@Target(ElementType.METHOD)——方法
@Target(ElementType.PARAMETER)——方法参数
@Target(ElementType.CONSTRUCTOR) ——构造函数
@Target(ElementType.LOCAL_VARIABLE)——局部变量
@Target(ElementType.ANNOTATION_TYPE)——注解
@Target(ElementType.PACKAGE)——包
例子
我们发现Target({ElementType.TYPE})是作用于类的而现在作用与方法 所有会报错
@Retention
@Retention:注解的保留位置,就是这个自定义注解的生命周期RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。
@Document
说明该注解将被包含在javadoc中,例如@Param @Author
@Inherited
说明子类可以继承父类中的该注解
例子
![](https://myblogtuchang.oss-cn-beijing.aliyuncs.com/resources-master/Target.png
结果
可以看出加了@testAnn1与@testAnn2都修饰了exSql类,但我们现在exSql2继承exSql,获取其注解发现只有@testAnn1
可以看出@testAnn1与@testAnn2的区别就是是否被@Inherited注解修饰 说明加了@Inherited注解 子类可以继承父类的这个加了@Inherited 的注解