当前位置:

首页 > 编程开发 > Java元注解编程:打造优雅的代码声明式逻辑

Java元注解编程:打造优雅的代码声明式逻辑

Java元注解四大核心:@Target指定注解作用位置,@Retention控制存活周期(反射需RUNTIME),@Documented纳入文档,@Inherited仅类层级继承。组合使用可打造声明式逻辑,如权限注解。@Repeatable需配合容器注解。元注解是说明书,需配套处理器才能生效。

Ja va元注解不是用来“炫技”的,而是让自定义注解真正具备可配置、可复用、可被正确处理的能力。没用好元注解,自定义注解就只是个标签;用对了,它就能成为业务逻辑的声明式入口。 先搞清楚四大核心元注解各自管哪一块。 **@Target** 指明注解能写在哪儿——是类上、方法上、参数里,还是连泛型参数都不放过?日常开发中 `ElementType.METHOD` 和 `ElementType.TYPE` 用得最频繁,但别忽略了 `ElementType.PARAMETER`(用于校验入参)和 `ElementType.TYPE_PARAMETER`(泛型类型占位符),它们在框架扩展里越来越关键。 **@Retention** 控制注解的存活周期。`SOURCE` 只在编译期有效(比如 `@Override`);`CLASS` 是默认值,注解会进字节码但不加载进 JVM;`RUNTIME` 才能让反射在运行时读取——只要需要反射解析注解(比如 Spring AOP 或自定义拦截器),就必须设为 `RUNTIME`,这点很容易踩坑。 **@Documented** 能让注解出现在生成的 Ja vaDoc 中。它不改变运行行为,但对团队协作很实在:别人看接口文档时,一眼就能看到 `@NonNull`、`@Deprecated` 等语义信息,省得反复翻代码。 **@Inherited** 允许子类继承父类的注解——但注意,它只对类级别的注解生效,并且只作用于 `extends` 关系,不适用于接口实现或方法重写。换句话说,父类方法上的 `@Inherited` 注解,子类方法是不会自动继承的,这点常被误解。

Ja va元注解编程:打造优雅的代码声明式逻辑

单个元注解能力有限,组合使用才能贴近真实场景。举个例子,定义一个权限检查注解,你会怎么配?大概长这样: - `@Target({ElementType.METHOD, ElementType.TYPE})` —— 支持加在控制器类或具体接口方法上 - `@Retention(RetentionPolicy.RUNTIME)` —— 运行时通过 AOP 切面读取并鉴权 - `@Documented` —— 在 Swagger 或 Ja vadoc 中显式暴露权限要求 - 不加 `@Inherited` —— 权限策略通常需要显式声明,避免子类意外继承宽松策略 再比如一个配置绑定注解(类似 Spring 的 `@ConfigurationProperties`): - `@Target(ElementType.TYPE)` —— 只允许标注在配置类上 - `@Retention(RetentionPolicy.RUNTIME)` —— 需要在启动时扫描并注入属性值 - `@Repeatable(PropertySources.class)` —— 允许同一类上多次声明不同配置源,增强灵活性 说到 **@Repeatable**,有两个隐性约束要小心。 要让注解支持重复声明,不能只加 `@Repeatable`,必须同时满足: - 被标记的注解(如 `@MyRole`)需要声明 `@Repeatable(MyRoles.class)`,其中 `MyRoles` 是容器注解 - 容器注解 `MyRoles` 必须有 `value()` 方法,且返回类型是该注解类型的数组(如 `MyRole[]`) 否则编译直接报错:“Repeatable annotation type must ha ve a containing annotation type”。Spring 5+ 已经广泛使用这个机制(比如 `@Bean`、`@Scope`),但手写时容易漏掉容器注解的规范定义。 最后,也是很多人容易犯的错:**别把元注解当功能开关**。 元注解本身不执行逻辑——`@Target` 不会阻止你写错位置(IDE 或编译器才做检查),`@Retention(RUNTIME)` 也不等于“自动生效”。真正起作用的是你写的处理器:可能是一个 Aspect、一个 BeanPostProcessor、或者一段反射遍历加条件判断的代码。 典型反例: - 定义了 `@LogExecutionTime` 并标了 `@Retention(RUNTIME)`,却没写 AOP 切面——注解存在,但日志永远不会打 - 给字段加了 `@NotBlank`,但没引入 Hibernate Validator 或没触发校验流程——空字符串照样入库 记住:元注解是“说明书”,不是“执行器”。声明之后,务必配套实现解析与响应逻辑。 不复杂,但容易忽略。
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 编程
相关文章 更多
仿脑光敏器件拥有可编程“遗忘机制”
仿脑光敏器件拥有可编程“遗忘机制”

美国俄勒冈州立大学研发出集成感知、存储与处理的新型光敏器件,具备可编程遗忘机制。通过栅极电压调控电荷位置,可主动增强或衰减记忆,有效降低能耗,为高效低功耗人工智能硬件提供新方向。

编程之美!从线程池状态管理来看二进制操作之美
编程之美!从线程池状态管理来看二进制操作之美

二进制操作在框架设计中被频繁使用,使用二进制在不同场景有提升计算速度、较少内存占用等多种优点;下面,我们依据线程池的状态管理,来看下怎么通过操作二进制对状态进行管理,过程中会发现编程之美~线程池状态首先,为了文章的完整性,我们还是先了解一下线程池的状态,总结如下如: 线程池状态分为5种:RUNNIN

编程化人类细胞能自主执行计算和决策
编程化人类细胞能自主执行计算和决策

以色列希伯来大学在《自然·通讯》发表研究,利用RNA反式剪接构建模块化人工遗传系统,使人类细胞能自主计算决策。系统内含全加法器与多路复用器,可并行处理多路信号并自带安全机制,未来可用于智能治疗细胞。

百度官网入口最新版 百度搜索网页版直达
百度官网入口最新版 百度搜索网页版直达

百度官方在线入口最新版网页版直达官网是https://www.baidu.com/,界面简洁无干扰、多端同步体验一致、内容聚合维度丰富、语音与图像识别稳定、隐私控制机制可见。

结束12天受限预览,GPT-5.6正式发布,Codex与ChatGPT合二为一
结束12天受限预览,GPT-5.6正式发布,Codex与ChatGPT合二为一

OpenAI发布GPT-5.6系列模型(Sol、Terra、Luna),结束12天受限预览。独立运行近一年的Codex应用并入ChatGPT桌面端,整合对话、编程与长程任务执行。新模型强调性能、速度与成本平衡,Sol在编程和Agent场景表现领先,但综合推理仍不及Claude系列。同步推出ChatGPTWork智能体,并实现Luna后训练由Sol自主完成。

必应国际版官网入口及登录方式
必应国际版官网入口及登录方式

必应Bing国际版官网入口是www.bing.com。该网址支持多语言和区域设置,提供多样化的搜索结果及个性化功能,如跨设备同步、主题更换和每日精选壁纸等。

百度官网入口链接 百度平台官方主页访问
百度官网入口链接 百度平台官方主页访问

百度官方网站入口链接是www.baidu.com,用户可通过该网址访问百度搜索及地图、网盘等服务,登录账号管理个人信息,并使用站长工具提交资源、分析数据。

java游戏高级编程 用不好怎么办?问题排查指南
java游戏高级编程 用不好怎么办?问题排查指南

Java游戏开发中常见性能卡顿、逻辑错误、维护困难及兼容性问题。应使用剖析工具定位性能瓶颈,关注并发与事件处理逻辑,通过单元测试验证。代码需遵循设计模式,保持模块独立。环境应确保JDK与依赖库版本兼容,并建立从单元到压力的多层次测试体系,结合重构持续优化。

java游戏高级编程 入门:从基础认知到上手使用
java游戏高级编程 入门:从基础认知到上手使用

Java游戏开发凭借跨平台特性广泛应用于移动端、网页及独立游戏领域。入门需掌握核心特性与框架选择,搭建开发环境。关键环节包括理解游戏循环、架构设计与图形渲染,并高效处理输入、更新与渲染。之后实现交互逻辑,进行性能与游戏性优化,最终打包发布,完成开发闭环。

eroot官网实战案例详解:如何高效解决编程问题
eroot官网实战案例详解:如何高效解决编程问题

数据处理服务因缓存策略缺陷导致内存过高和崩溃。通过监控工具定位问题后,修复了缓存逻辑、移除冗余缓存并完成测试验证。案例总结出高效解决问题的关键:准确定义问题、善用工具、分解步骤、深挖根源、验证预防,体现了系统性思维与经验积累的重要性。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Postman macOS版
Postman macOS版
Mac

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

Docker Desktop macOS版
Docker Desktop macOS版
Mac

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Android Studio macOS版
Android Studio macOS版
Mac

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

WINDOWS 更多
PixPix 网页版
PixPix 网页版
Windows

PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。

Postman Windows版
Postman Windows版
Windows

Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

Docker Desktop Windows版
Docker Desktop Windows版
Windows

Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。