谈谈@Target、@Retention、@Documented、@Inherited注解的用法

前言

@Target@Retention@Documented@Inherited注解都是作用在注解上的注解,java把他们亲切的叫做元注解,这四个注解正是Java的四大元注解。

@Target注解

@Target注解算是比较常见的注解了,@Target注解用于描述注解的使用范围,优雅的说就是使用了@Target去定义一个注解,那么可以决定定义好的注解能用在什么地方。

为了显得身临其境的效果,我们可以先进@Autowired注解看看

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
    boolean required() default true;
}

我想各位都应该很清楚@Autowired注解的用法了,这个时候我们再来分析分析@Target注解的用法。

内部值:ElementType[] value()数组, value值类型 ElementType枚举类型,元注解中的枚举值决定了,一个注解可以标记的范围

TYPE : 类型上面 用于描述类、接口(包括注解类型) 或enum声明
FIELD: 用于描述字段
METHOD :方法
PARAMETER: 参数 【参数名】
CONSTRUCTOR : 构造方法
LOCAL_VARIABLE: 局部变量
ANNOTATION_TYPE : 可以打在注解上面
PACKAGE :可以打在包上面
TYPE_PARAMETER: 参数类型【形式参数类型】
TYPE_USE : 任何位置都可以

这时应该更能清晰的看出,@Autowired注解用于描述注解的使用范围了~

@Retention

@Retention也是开发中经常用到注解

public enum RetentionPolicy {
    SOURCE,
    CLASS,
    RUNTIME
}

@Retention:用于描述一个注解存在的生命周期,主要包括源码,字节码文件,运行时。

这3个生命周期分别对应于:Java源文件(.java文件) —> .class文件 —> 内存中的字节码。
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃【默认】
3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

@Document

@Document注解较少用,简单了解即可。
该注解主要判断是否可以生成到 API文档中 ==》即生成API文档的时 检验

@Inherited

这是一个稍微复杂的注解类型. 它指明被注解的类会自动继承. 更具体地说,如果定义注解时使用了 @Inherited 标记,然后用定义的注解来标注另一个父类, 父类又有一个子类(subclass),则父类的所有属性将被继承到它的子类中.

@Inherited表示一个【注解】能够被继承,不是说注解与注解之间能否相互继承,而是说:一个类A被注解了,那么另外一个类B,继承了A类B类能够继承到A类中,的注解 (即被@Inherited注解过的注解)

总结

1.@Target :用于描述注解的使用范围
2.@Retention:用于描述注解的生命周期【源代码阶段、CLASS文件中有效、运行时有效】
3.@Documented:表示该注解是否可以生成到 API文档中。注意:@Documented是一个标记注解,没有成员。
4.@Inherited:使用@Inherited定义的注解具备继承性 假设一个注解在定义时,使用了@Inherited,然后该注解在一个类上使用,如果这个类有子类,那么通过反射我们可以从类的子类上获取到同样的注解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宜春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值