讲师中心 微信公众号

工具推荐

视频效率加速
剧云
剧云

中文短剧剧本制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

updream

一键生成高质量推广成片

Laper
Laper

剧本策划到成片协作

Java反射中的注解

小雪姑娘_1892

小雪姑娘_1892

发布时间:2017-05-28 11:35:24

|

1591人浏览过

|

来源于php中文网

原创

“注解”这个词,可谓是在java编程中出镜率比较高,而且也是一个老生常谈的话题。我们之前在聊spring相关的东西时,注解是无处不在,之前我们简单的聊过一些“注解”的相关内容,比如在spring中是如何进行“注解”组合的。因为注解在java编程中还是比较重要的,所以我们今天的博客就把注解的东西给系统的介绍一下,当然我们会依托于具体的实例。

“注解”说白了就是存储数据的一种方式,如果注解单拎出来功能也就一般,如果将“注解”与Java的“反射机制”相结合,那么可以做的事情就多了。也就是说,你可以通过反射来读取“注解”提供的信息,然后来根据你的具体需求来做一些事情。当然,之前我们常用XML来为反射机制提供信息,不过“XML”的配置还是没有“注解”这种数据形式好管理,好维护,所以“注解”的地位还是比较重要的。

下方我们先聊一下“元注解”,然后在根据这些“元注解”来自定义注解,并使用Java的“反射机制”来读取各种类型的注解信息。

 

一、元注解

立即学习“Java免费学习笔记(深入)”;

在本篇博客的第一部分,我们先来整体的看一下“元注解”,然后下方的内容再根据这些元注解进行展开。

 

1、@Target

使用方式:@Target(ElementType.CONSTRUCTOR)

@Target注解是比较重要的,Target的中文是“目标、位置”的意思,见名知意。@Target就用来声明我们创建的注解所放置的位置,也就是我们所创建的注解可以修饰什么样的元素。@Target的参数是一个ElementType的枚举,每个枚举项代表着一个位置。下方就是几个ElementType枚举比较常用的值:

  • TYPE: 类,如果@Target的参数是TYPE,那么我们创建的这个注解只能修饰类、接口、枚举等这些类型上。
  • FIELD: 字段修饰,如果我们的自定义注解是FIELD类型的话,那么我们的注解只能用来修饰类或者枚举的字段,也就是成员变量。
  • CONSTRUCTOR:构造器类型,该类型的“注解”只能修饰构造器。
  • METHOD:修饰“方法”的注解。
  • PARAMETER:修饰“方法”中的参数的注解。
  • LOCAL_VARIABLE: 修饰“局部变量”的注解。

当然,上面是简单一聊,下方会给出上述类型注解的具体实例。下面截图是ElementType中所有的选项以及每个枚举值的作用。具体如下所示,下方两个是1.8后新加的枚举项,如下所示:

  

 

2、@Retention

使用方式:@Retention(RetentionPolicy.RUNTIME)

 

上面是@Retention的使用方式,Retention的中文意思是“保留”,也就是说该元注解给出了“注解”的保留周期。@Retention也是接收一个枚举类型的参数,下方就是该枚举所包含的类型。下方的英文注释已经具体的给出了每个枚举项所对应的意思。

  • SOURCE:说明我们的注解只会留在我们的源码中,并不会被编译。
  • CLASS: 说明我们的注解会被编译成字节码存储到.class文件中,但不会在虚拟机中链接运行。
  • RUNTIME:这个就说明我们的注解会一直保留到程序的运行时,如果你想在运行时根据注解的信息通过反射机制做一些事情的话,那么必须得将我们的注解保留到这一阶段。

  

 

3、@Document与@Inherited

这两个注解就比较简单了,@Document说明将此注解包含在Javadoc中,而@Inherited则表示,该注解可以被子类继承。

上述的介绍可能会有些抽象,接下来我我们就根据实例,利用反射机制来操作相应类型的自定义注解。

 

 

二、测试用例介绍

下方截图是本篇博客所涉及Demo的目录以及主要的操作类。

  • AnnotationTracker:该类负责通过Java的“反射机制”来获取相应类型的注解的对象以及注解中的相关信息。在AnnotationTracker的类中,全是静态方法,静态方法传入的是相关注解修饰的Class。大体结构如下所示。
  • CE…Annotation:这些类是不同类型的注解,稍后我们会详细讨论。
  • TestClass:该类是注解所修饰的测试类。
  • Main:我们本Demo的测试用例的执行方法。

  

 

 

三、类型注解:@Target(ElementType.TYPE)

接下来,我们来看一下类型注解的创建与使用。下方内容我们下创建一个修饰类型的注解,然后再相关类中添加上该注解的修饰,最后使用Java的反射机制来获取相应的注解信息。

1、创建注解

首先创建我们的注解,具体步骤如下所示,选择Annotation后键入注解名点击回车即可。

  

 

下方代码段就是所创建注解中的详细内容。我们可以看出@Target元注解的参数是ElementType.TYPE类型的。也就是说明我们创建的这个注解是修饰类型的注解,可以作用域类、接口、枚举等类型。然后我们还看到@Retention的参数是RetentionPolicy.RUNTIME类型的,说明该注解一直被保留到运行时。

注解是使用@Interface来声明的,这与接口的什么类似。@Interface后方跟着的就是注解的名称,本注解的名称为CETypeAnnotation。其中有一个公有的(public)整数(int)类型的id属性。该属性的默认值是0,具体如下所示。

 

  

 

2、注解的使用

下方代码段是对上述注解的使用。因为上述创建的注解是ElementType.TYPE类型的,所以我们就用该注解来修饰我们创建的一个类,也就是下方的TestClass。在注解修饰时,我们给id设置了一个值,也就是下方的id = 10。

   

 

3、使用反射获取修饰类型注解的相关信息

接下来,我们就要在AnnotationTracker类中添加利用Java的“反射机制”来获取相应的TestClass类的注解的相关信息了,关键代码如下所示。trackTypeAnnotation()方法的参数是一个Class类型,然后可以通过Class的getAnnotation()方法来获取相应类中的注解对象。如下方的红框所示。

获取完相应的注解对象后,我们就可以获取到相应注解中的配置信息了。

  

 

4、测试用例以及测试结果

接下来我们就在Main方法中来调用AnnotationTracker类中的上述方法,并传入TestClass,如下所示。下方是其打印结果。

  

 

 

四、其他类型的注解

上述我们详细的聊了ElementType.TYPE类型的注解,接下来我们来看一下其他类型的注解,以及这些注解的使用方式。

 

1、@Target(ElementType.CONSTRUCTOR)

接下来我们来创建一个修饰构造器的注解。下方的CEConstructorAnnotation就是我们创建的用来修饰类构造器的注解。其中的value字段的默认值是一个空字符串。

  

 

2、@Target(ElementType.FIELD)

接下来我们就来创建一个修饰字段的注解,我们将该字段命名为CEFieldAnnotation,具体代码如下所示:

  

 

3、@Target(ElementType.METHOD)

下方是我们创建的修饰方法的注解,我们将其命名为CEMethodAnnotation,具体代码如下所示。

  

 

4、@Target(ElementType.PARAMETER)

下方是修饰方法中参数的注解,我们将其命名为,如下所示:

  

 

 

五、上述相关注解的使用

下方就是上述所定义的各种类型的注解的使用方式,各司其职。具体就不做过多赘述了。

  

 

 

六、使用反射机制获取不同类型的注解信息

之前我们已经聊了如何使用“Java”的反射机制来获取相关注解的信息,下方我们将会分别获取上述各种类型的注解的相关信息。下方代码主要是AnnotationTracker中的相关代码。

1、获取修饰构造器类型的注解信息

  

 

2、获取修饰方法和方法参数的注解信息

  

 

3、获取修饰字段的注解信息

  

 

4、测试用例以及输出结果

  

 

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

更多
Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

60

2026.11.12

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

40

2026.11.12

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

20

2026.11.12

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

140

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

120

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

100

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

100

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

80

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

80

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn