注解的作用
原文链接:注解的作用 – 编程屋
目录
1 什么是注解
2 如何自定义一个注解
2.1 基本语法
3 注解使用示例
前言:
今天看了一个小段子,上面提到了注解有什么作用,那么注解有什么作用呢?我们来讨论一下
1 什么是注解
官方:注解是一种能够被添加到Java代码中的元数据,类、方法、变量、参数和包都可以用注解来修饰。注解对于他所修饰的代码并没有直接的影响。
2 如何自定义一个注解
注解其实就是一种标记,可以在程序代码的关键节点(类、方法、变量、参数、包)上打下这些标记,然后在编译时和运行时可以检测到这些标记从而执行一些特殊的操作,因此自定义注解基本流程:
第一步:定义注解-------相当于定义标记
第二步:配置注解-------把标记打在需要用到的代码中
第三部:解析注解--------在编译器或运行时检测到标记,并进行特殊操作
2.1 基本语法
注解Java中,与类、接口、枚举类似,因此其声明的语法基本一致,只是所有的关键字有所不同@interface,在底层实现上所有自定义的注解都会自动继承java.lang.annotation.Annotation接口。
@Target:用来专门来限定某个自定义注解能够自定义运用在哪些Java元素上的
@Retention:翻译为持久力,保持力,即用来修饰自定义注解的生命力。
注解的声明周期有3个阶段:1 Java源文件阶段;2 编译到class文件阶段 ;3 运行期阶段,同样使用了RetentionPolicy枚举类型定义了3个阶段
详解:
RetentionPolicy.SOURCE:如果一个注解被定义为这种类型,则他被限定在源文件中,那么这个注解将不会参与编译也不会在运行期间起任何作用。这个注解就和注释一样的效果,只能被阅读Java文件的人看到
RetentionPolicy.CLASS:如果一个注解被定义为这种类型,那么编译器会在编译时根据注解做一些处理动作,但是运行jvm会忽略它,我们在运行期间也不能获取到
RetentionPolicy.RUNITIME:如果一个注解定义为这种类型,那么这个注解可以在运行期的加载阶段被加载到class文件中。那么程序运行阶段,我们可以反射得到这个注解,并通过判断是否有这个注解或这个注解中的属性值,从而执行不同的代码段。我么实际开发中用到的注解几乎都是这种RUNITIME类型。
@Documented:用来指定自定义的注解是否能随着被定义的Java文件生成的JavaDoc文档中
@Inherited:是指某个自定义注解如果写在了父类的声明部分,那么子类的声明部也能自动拥有改注解。该注解只对那些@Target被定义为ElementType.TYPE的自定义注解起作用。
3 注解使用示例
先自定义一个注解以及一个类
以上只是部分内容,为了维护方便,本文已迁移到新地址: 注解的作用 – 编程屋
想养一只萨摩耶~: 转行吧
weixin_45873251: 新地址404了
我不想学编程: 新的文章链接打不开了
Sasuke1202: +1我也是下了最新版easyapi没有yapi的部分,然后发现EasyYapi的插件有,可以用这个。
勇敢的打工人: if (Objects.nonNull(methodSignature)) 这个判断是个坑吧 注意了