发布时间:2026/8/17 3:13:06
497. Java 反射 - 使用反射读取注解 文章目录497. Java 反射 - 使用反射读取注解1. 为什么要关心注解2. 获取注解的工具类AnnotatedElement3. 示例类级别注解4. 示例重复注解 (Repeatable Annotations)方式一通过容器注解 Validators方式二直接用 getAnnotationsByType()5. 总结497. Java 反射 - 使用反射读取注解1. 为什么要关心注解在现代 Java 开发中注解已经成为框架和库的“开关”。ORM 框架如 Hibernate、JPA用注解标记实体字段和表的映射。Spring用注解实现依赖注入、事务管理、安全控制。验证框架用注解标记参数是否允许null、是否必须符合某种格式。 注解之所以能发挥作用核心原因就是运行时通过反射 API 读取注解并执行相应逻辑。2. 获取注解的工具类AnnotatedElement以下几个反射类都实现了AnnotatedElement接口Class类、接口、枚举、记录、数组Field字段Method方法Constructor构造函数它们提供了几组关键方法isAnnotationPresent(Class?)是否存在某个注解。getAnnotations()获取该元素上的所有注解包括继承的。getDeclaredAnnotations()只获取该元素本身声明的注解。getAnnotation(Class?)获取指定类型的注解实例。getAnnotationsByType(Class?)获取重复注解。3. 示例类级别注解定义枚举和注解enumSerializedFormat{BINARY,XML,JSON}Target(ElementType.TYPE)Retention(RetentionPolicy.RUNTIME)interfaceBean{}Target(ElementType.TYPE)Retention(RetentionPolicy.RUNTIME)interfaceSerialized{SerializedFormatformat()defaultSerializedFormat.JSON;}在类上使用SerializedBeanpublicclassPerson{}通过反射读取Class?cPerson.class;booleanisBeanc.isAnnotationPresent(Bean.class);System.out.println(isBean isBean);Annotation[]annotationsc.getAnnotations();for(Annotationannotation:annotations){System.out.println(annotation annotation);}输出isBeantrueannotationorg.devjava.Serialized(formatJSON)annotationorg.devjava.Bean() 注意返回的其实是注解类的实例对象你可以直接调用它的方法。Serializedserializedc.getAnnotation(Serialized.class);System.out.println(format serialized.format());输出formatJSON4. 示例重复注解 (Repeatable Annotations)定义验证规则enumValidationRules{NON_NULL,NON_EMPTY,NON_ZERO}Target(ElementType.FIELD)Retention(RetentionPolicy.RUNTIME)interfaceValidators{Validator[]value();}Target(ElementType.FIELD)Repeatable(Validators.class)interfaceValidator{ValidationRulesvalue();}应用在Person类的字段上publicclassPerson{Validator(ValidationRules.NON_NULL)Validator(ValidationRules.NON_EMPTY)privateStringname;}读取注解方式一通过容器注解ValidatorsFieldnameFieldPerson.class.getDeclaredField(name);Annotation[]annotationsnameField.getAnnotations();Validatorsvalidators(Validators)annotations[0];for(Validatorv:validators.value()){System.out.println(validator v);}输出validatororg.devjava.Validator(NON_NULL)validatororg.devjava.Validator(NON_EMPTY)方式二直接用getAnnotationsByType()Validator[]validatorsnameField.getAnnotationsByType(Validator.class);for(Validatorv:validators){System.out.println(annotation v);}输出annotationorg.devjava.Validator(NON_NULL)annotationorg.devjava.Validator(NON_EMPTY) 第二种方式更简洁JDK 会自动帮你展开容器注解。5. 总结注解是框架的“说明书”框架通过反射读取注解来决定如何运行。类、方法、字段、构造函数都可以携带注解并通过AnnotatedElement访问。isAnnotationPresent()检查是否存在。getAnnotation()获取单个注解。getAnnotationsByType()用于重复注解。

相关新闻

2026/8/17 3:13:06

PMSM无传感器控制:滑模观测器原理、Simulink仿真与参数调试实战

1. 项目缘起:为什么无传感器控制是PMSM驱动的一个“坎”在电机驱动的圈子里,永磁同步电机(PMSM)凭借其高功率密度、高效率和高动态响应性能,早已成为伺服、电动汽车、工业机器人等领域的宠儿。但一个绕不开的经典难题是…

2026/8/17 3:13:06

数学建模竞赛单人作战指南:从团队协作困境到高效个人技术栈

1. 项目概述:当数学建模遇上“神仙队友”如果你是一名理工科学生,或者参加过任何形式的科创竞赛,那么“数学建模”这四个字对你来说,可能意味着熬夜、咖啡、和无穷无尽的论文与代码。但比这些更让人刻骨铭心的,往往是你…

2026/8/17 3:13:06

计算服务 基于 xxl-job 的跑批业务实践记录

Q1:xxl-job 和 calc 自己的跑批逻辑是怎么接起来的? 入口并不复杂。BaseJobHandler 是一个抽象基类,具体任务继承它之后只负责实现业务计算。xxl-job 那边配置的 Handler 调用基类统一的调度入口后,基类会从 xxl-job 那里拿到调度…

2026/8/17 4:13:09

数学建模实战:Matlab与Python程序代编核心技术与选型指南

1. 项目概述:数学建模与程序代编的实战价值在科研、竞赛和工程实践中,数学建模是一个将现实问题抽象为数学语言,并通过计算求解以指导决策的核心过程。无论是全国大学生数学建模竞赛,还是企业内部的流程优化、金融风险预测&#x…

2026/8/17 4:13:09

前端新闻页面实战:盒子模型与Flex布局详解

1. 新闻页面制作实战:从盒子模型到Flex布局刚入门前端时,新闻页面是我练习的第一个完整项目。这种内容密集型页面能系统训练HTML结构搭建和CSS布局能力,特别是盒子模型和Flex布局这两个核心概念。下面分享我制作新闻页面的完整思路和踩坑经验…

2026/8/17 4:13:09

网络设备配置与故障排查实战:从交换机VLAN到路由器防火墙

最近在排查一个网络问题时,发现团队里不少同学对网络设备的基础认知还停留在“交换机就是交换的,路由器就是路由的”这种模糊层面。当需要定位一个跨网段的访问延迟,或者分析一个VLAN内的广播风暴时,往往因为对设备工作原理和配置…

2026/8/17 4:08:08

KKCE: 网站测速平台,全球300+节点-快快测

一、引言:为什么配置了 HTTP/3,测速却显示 HTTP/2? 在升级 HTTP/3 时,我们通常会在服务器上启用 QUIC,并在响应头中添加 Alt-Svc: h3":443"。用 www.kkce.com 的 “网站测速”​ 测试,有时能看到…

2026/8/16 0:00:35

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/17 0:02:57

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:02:57

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/15 9:46:39

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/16 16:53:03

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/15 9:46:30

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…