Java 注解:从入门到实战的完整指南
1. 什么是注解注解Annotation是 Java 5 引入的一种元数据机制它允许我们在代码中添加结构化、机器可读的元信息。注解本身不改变程序的逻辑但可以被编译器、框架和工具在编译期或运行期读取从而影响代码的处理方式。简单来说注解就是给代码贴上的标签这些标签可以被各种工具识别并触发相应的行为。2. 注解的作用注解在现代 Java 开发中扮演着重要角色主要用途包括编译期检查如Override让编译器检查方法是否正确重写SuppressWarnings抑制警告。代码生成如 Lombok 的Getter、Setter在编译期自动生成代码。框架配置如 Spring 的Component、Autowired替代繁琐的 XML 配置。运行时处理通过反射读取注解实现依赖注入、ORM 映射等功能。3. 内置注解Java 提供了一些常用的内置注解我们先从它们开始认识publicclassAnimal{publicvoidspeak(){System.out.println(动物叫声);}}publicclassDogextendsAnimal{Overridepublicvoidspeak(){System.out.println(汪汪);}DeprecatedpublicvoidoldMethod(){// 标记为过时的方法}SuppressWarnings(unused)publicvoidtest(){intunusedVar10;// 不会产生警告}}Override告诉编译器这是重写父类的方法如果方法签名不匹配会报错。Deprecated标记该方法已过时使用时会给出警告。SuppressWarnings抑制指定的编译器警告。4. 元注解元注解是用于注解其他注解的注解它们定义了注解的行为和适用范围。Java 提供了 5 个元注解元注解作用Target指定注解可以应用的位置类、方法、字段等Retention指定注解的保留策略源码、字节码、运行时Documented标记注解是否包含在 Javadoc 中Inherited标记注解是否可以被子类继承Repeatable标记注解是否可以重复使用4.1 TargetTarget定义了注解可以修饰的目标常用取值包括importjava.lang.annotation.ElementType;importjava.lang.annotation.Target;Target({ElementType.METHOD,ElementType.TYPE})publicinterfaceMyAnnotation{}上面的注解只能用于方法和类上如果用在字段上会编译报错。4.2 RetentionRetention定义了注解的保留策略有三个取值RetentionPolicy.SOURCE仅保留在源码中编译时丢弃。RetentionPolicy.CLASS保留在字节码中但运行时不可见默认值。RetentionPolicy.RUNTIME保留到运行时可通过反射读取。importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;Retention(RetentionPolicy.RUNTIME)publicinterfaceMyAnnotation{}如果需要在运行时通过反射读取注解必须使用RUNTIME策略。5. 自定义注解了解了元注解后我们就可以创建自己的注解了。下面是一个完整的自定义注解示例importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;Target(ElementType.FIELD)Retention(RetentionPolicy.RUNTIME)publicinterfaceFieldInfo{Stringname()default;Stringdescription()default;booleanrequired()defaultfalse;}这个注解用于描述字段信息包含三个属性每个属性都提供了默认值。6. 注解的使用与反射读取注解本身不会自动生效需要通过反射来读取并处理。下面演示如何定义并使用一个简单的注解importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;importjava.lang.reflect.Field;Target(ElementType.FIELD)Retention(RetentionPolicy.RUNTIME)interfaceFieldInfo{Stringname()default;booleanrequired()defaultfalse;}classUser{FieldInfo(name用户名,requiredtrue)privateStringusername;FieldInfo(name年龄)privateintage;publicUser(Stringusername,intage){this.usernameusername;this.ageage;}}publicclassAnnotationDemo{publicstaticvoidmain(String[]args)throwsIllegalAccessException{UserusernewUser(张三,25);for(Fieldfield:User.class.getDeclaredFields()){FieldInfoinfofield.getAnnotation(FieldInfo.class);if(info!null){field.setAccessible(true);Objectvaluefield.get(user);System.out.println(字段: field.getName(), 描述: info.name(), 必填: info.required(), 值: value);}}}}运行结果字段: username, 描述: 用户名, 必填: true, 值: 张三 字段: age, 描述: 年龄, 必填: false, 值: 257. 注解在框架中的应用注解在主流框架中应用广泛以 Spring Boot 为例RestControllerRequestMapping(/api/users)publicclassUserController{AutowiredprivateUserServiceuserService;GetMapping(/{id})publicUsergetUser(PathVariableLongid){returnuserService.findById(id);}}RestController标记这是一个 REST 控制器。RequestMapping映射请求路径。Autowired自动注入依赖。GetMapping映射 GET 请求。PathVariable绑定路径参数。框架在启动时会扫描这些注解通过反射创建对象、注入依赖、注册路由从而大大简化了开发配置。8. 注解的最佳实践使用注解时建议遵循以下原则合理设置 Retention只有需要运行时读取的注解才使用RUNTIME否则会增加运行时开销。提供默认值为注解属性提供合理的默认值减少使用者的配置负担。命名清晰注解名称和属性名要能准确表达其含义。避免过度使用注解虽好但不要滥用保持代码的可读性。组合使用元注解合理使用Target和Retention限制注解的使用范围。9. 总结注解是 Java 中强大的元编程工具它让代码更加简洁、配置更加灵活。通过自定义注解结合反射机制我们可以实现很多强大的功能这也是 Spring、MyBatis 等主流框架的核心基础。掌握注解的使用不仅能帮助我们更好地理解框架原理还能在实际开发中写出更优雅、更灵活的代码。

相关新闻

2026 提示词注入攻击:黑客一句“忽略之前的指令“就能攻破你的 AI 应用(MonkeyCode 实战)

2026 提示词注入攻击:黑客一句“忽略之前的指令“就能攻破你的 AI 应用(MonkeyCode 实战)

2026 提示词注入攻击:黑客一句"忽略之前的指令"就能攻破你的 AI 应用(MonkeyCode 实战)你以为的 AI 应用:聪明、可靠、只做你让它做的事。 黑客眼里的 AI 应用:一个会被一句话调包的可编程机器人。一、先讲个…

2026/11/2 16:19:10 阅读更多 →
从 Mini Shell 到 Linux 进程通信:深入理解 fork、pipe 与文件描述符

从 Mini Shell 到 Linux 进程通信:深入理解 fork、pipe 与文件描述符

一、引言首先看一条shell指令echo hello | grep hello | wc -c我们平时认为这是“一条命令”,但实际上 Linux 内核看到的是:Shell│├── fork → echo│├── fork → grep│└── fork → wcecho ── pipe ──> grep ── pipe ──> wc那么…

2026/11/2 16:18:17 阅读更多 →
低GI大米怎么选?看报告更看口感

低GI大米怎么选?看报告更看口感

要弄清低gi大米哪个品牌好,别盯包装上印了多少粗粮图案,唯一的硬指标是看它有没有正规检测报告证明GI值小于55。据《控糖主食赛道观察报告》2026年8月的数据,国内需要关注主食血糖反应的人群已超4.5亿。但真能兼顾数据达标和白米饭口感的产品…

2026/10/26 10:24:02 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/2 0:25:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/2 10:46:11 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/2 10:47:40 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/2 1:16:51 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/2 10:46:31 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/2 10:46:26 阅读更多 →

日新闻

周新闻

月新闻