• 背景
  • 作用
    • 1、@Documented
    • 2、@Inherited
    • 3、保留策略 @Retention
    • 4、使用范围 @Target
  • 扩展基础知识
    • 1、@Retention之RetentionPolicy
    • 2、@Target之ElementType
  • 最后
  • 感谢

背景

在jdk1.5引入了注解概念。好多框架(如Spring)都都开始大量的使用注解。

四大元注解对应的package是 java.lang.annotation。

作用

负责注解其他注解。

1、@Documented

一个标记注解,没有成员,
描述其它类型的注解应该被作为被标注的程序成员的公共API,
因此可以被例如javadoc此类的工具文档化。
即拥有这个注解的元素可以被javadoc此类的工具文档化。
它代表着此注解会被javadoc工具提取成文档。
在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@return,@param 等。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {}

使用实例:
并不是每个注解都有此元注解。如 @Override

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {}

2、@Inherited

一个标记注解,没有成员,
描述了某个被标注的类型是被继承的。
如果一个使用了@Inherited修饰的注解类型被用于一个class,则这个注解将被用于该class的子类。
允许子类继承父类中的注解。即拥有此注解的元素其子类可以继承父类的注解。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {}

使用实例:
并不是每个注解都有此元注解。
含有@Inherited的注解,如 swagger下的 @ApiModel

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ApiModel {String value() default "";String description() default "";Class<?> parent() default Void.class;String discriminator() default "";Class<?>[] subTypes() default {};String reference() default "";
}

3、保留策略 @Retention

描述了此注解被保留的时间长短。
表示需要在什么级别保存该注释信息,用于描述注解的生命周期【被描述的注解在什么范围内有效】。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {RetentionPolicy value();
}

使用实例:
这个@Retention 好像每个注解都有的。就不举例子了。

4、使用范围 @Target

描述了此注解所修饰的对象范围。
用于描述注解的使用范围【被描述的注解可以用在什么地方】。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {ElementType[] value();
}

使用实例:
这个@Target 好像每个注解都有的。就不举例子了。

扩展基础知识

1、@Retention之RetentionPolicy

public enum RetentionPolicy {/*** 仅出现在源代码中,而编译器将丢弃注释。*/SOURCE,/*** 编译器将注释记录在类文件中,但不需要在运行时由VM保留。这是默认值行为。*/CLASS,/**** 编译器将注释记录在类文件中,并在运行时由VM保留,因此可以反射地读取它们。* 可以看看 java.lang.reflect.AnnotatedElement* */RUNTIME
}

深入可以研究 java.lang.reflect.AnnotatedElement。

2、@Target之ElementType

public enum ElementType {/** Class, interface (including annotation type), or enum declaration */TYPE,/** Field declaration (includes enum constants) */FIELD,/** Method declaration */METHOD,/** Formal parameter declaration */PARAMETER,/** Constructor declaration */CONSTRUCTOR,/** Local variable declaration */LOCAL_VARIABLE,/** Annotation type declaration */ANNOTATION_TYPE,/** Package declaration */PACKAGE,/*** Type parameter declaration** @since 1.8*/TYPE_PARAMETER,/*** Use of a type** @since 1.8*/TYPE_USE
}

最后

分享一个记忆四大元注解的方法就是简写 DIRT(Documented Inherited Retention Target )。

感谢

如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【点赞】支持,或请我喝杯咖啡【赞赏】,这将是我继续写作,分享的最大动力!
作者:勤快的小蚂蚁
声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!
————————————————
版权声明:本文为CSDN博主「勤快的小蚂蚁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fxzzq/article/details/126027955

深入理解Spring四大元注解DIRT相关推荐

  1. java注解的执行顺序_深入理解Spring的@Order注解和Ordered接口

    前言 Spring的@Order注解或者Ordered接口大家都知道是控制顺序的,那么它们到底是控制什么顺序的?是控制Bean的注入顺序,还是Bean的实例化顺序,还是Bean的执行顺序呢?那么我们先 ...

  2. 关于小白(我)理解Spring的一些注解

    以下这个类的注解@Component这个注解的翻译是组件的意思,对于这个注解自己的理解是将这个类交给spring托管起来,这个注解相当于将它的构造方法公用化,这个注解是配合 @Autowired一起使 ...

  3. Java注解篇(一)四大元注解@Target@Retention@Documented注解

    1.@Target目标注解,意思带注解的适用于哪些范围,有以下参数可供使用 @Target(ElementType.METHOD) 1.CONSTRUCTOR:用于描述构造器 2.FIELD:用于描述 ...

  4. @transactional注解原理_《Spring源码解析(十二)》深入理解Spring事务原理,告别面试一问三不知的尴尬...

    本文将带领大家领略Spring事务的风采,Spring事务是我们在日常开发中经常会遇到的,也是各种大小面试中的高频题,希望通过本文,能让大家对Spring事务有个深入的了解,无论开发还是面试,都不会让 ...

  5. spring boot: 组合注解与元注解

    package ch2.annotation;//target/elementType用来设定注解的使用范围 import java.lang.annotation.ElementType; impo ...

  6. java 异步调用 事务_深入理解Spring注解@Async解决异步调用问题

    序言:Spring中@Async 根据Spring的文档说明,默认采用的是单线程的模式的.所以在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的. 那么当多个任务的执行势必会相互影响. ...

  7. 深入理解java注解,java的4个元注解,注解三要素——定义、使用及读取执行,深入了解注解的底层本质,通过反射自动、动态获取注解所有属性以及属性值

    1. 注解的定义 注解也是一种引用类型,编译后会生成 .class 字节码文件,作用就是为程序进行标识,不同注解能实现不同功能. 2. 注解的使用 3. 注解的读取执行 3.1 得不到注解信息,得到的 ...

  8. Spring组合注解与元注解

    为什么80%的码农都做不了架构师?>>>    1. 可以注解到别的注解上的注解称为元注解,被注解的注解称为组合注解,通过组合注解可以很好的简化好多重复性的注解操作 2. 示例组合注 ...

  9. Spring组合注解和元注解

    2019独角兽企业重金招聘Python工程师标准>>> 元注解:可以注解到其他注解的注解. 组合注解:被注解的注解,组合注解具备元注解的功能. @Configuration就是一个组 ...

  10. 注解整理 - 元注解,lombok注解,spring 注解,springboot注解,springmvc注解

    注解大全 java四种元注解 @Target @Retention @Documented @Inherited lombok注解 lombok注解为什么强大 lombok注解的使用方式 1.安装lo ...

最新文章

  1. TortoiseSVN在Windows下的使用
  2. CSU2188: Substring
  3. 深度学习RNN实现股票预测实战(附数据、代码)
  4. android的窗口机制分析------UI管理系统
  5. 中微CMS32 Keil环境搭建
  6. 万网域名注册查询接口(API)的说明
  7. (转)淘淘商城系列——内容分类管理
  8. 关于TikTok的变现思考和三种玩法
  9. 深入理解Nginx模块开发与架构解析第2版(书签导航正确)
  10. 压缩文件的格式zip和rar有什么区别?
  11. 史上最全的python基础语法知识清单!!!
  12. 系统运维工程师30岁学python_一名Linux系统运维工程师的自述
  13. JixiPix Portrait Painter for mac(照片转油画工具)
  14. 原生JS实现动态返回顶部
  15. 猿创征文|pandas实现将矩阵导出到excel+对矩阵进行连接
  16. 二阶常系数齐次线性微分方程的通解
  17. python爬取酷狗音乐json数据为空_【Python3爬虫】下载酷狗音乐上的歌曲
  18. 实用功能#用Python给你的微信升升级吧
  19. 优化器(Optimizer)(一)
  20. 老板们这些股权结构需要优化了

热门文章

  1. 共青团课程华育兴业java_华育兴业|Java程序员金三银四必备面试题及答案(基础篇)...
  2. centos7 Redis多机多节点集群部署
  3. Pillow图像几何变换
  4. 正弦定理和余弦定理_高中数学,正弦定理和余弦定理的应用举例,含高频考点及详细解析...
  5. 攻防世界 REVERSE 新手区/logmein
  6. C语言调用函数流程图怎么画,【C语言】求教这个流程图怎么画啊
  7. HDU 2202 POJ 2079 求平面最大三角形 【旋转卡壳】
  8. MYSQL安装遇到MySQL-server conflicts with错误(mysql5.6.17)
  9. kubuntu14.10正式发布
  10. 六度空间理论(数据结构图,c语言版)