Java常用注解通俗解释

注解就像是给Java代码贴的"便利贴",它们不会改变代码本身的逻辑,但能给编译器、开发工具或运行时环境提供额外信息。下面我用最通俗的方式解释Java中最常用的注解:

一、基础篇:人人必知的注解

1. `@Override` - "我是重写的!"
   • 贴在方法上,告诉编译器:"这个方法是我从爸爸类(父类)那里继承来后改写的"

   • 如果实际上没重写任何方法,编译器会报错提醒你

   • 例子:

     ```java
     @Override
     public String toString() { return "我是重写过的toString"; }
     ```

2. `@Deprecated` - "过时了,别用了!"
   • 贴在类、方法或字段上,相当于挂个"即将停用"的牌子

   • 用了带这个标记的代码,编译器会给出警告

   • 例子:

     ```java
     @Deprecated
     public void oldMethod() { ... } // 这个方法以后要淘汰了
     ```

3. `@SuppressWarnings` - "别吵,我知道有问题!"
   • 让编译器"闭嘴",不要显示某些警告

   • 常用参数:`"unchecked"`(忽略泛型警告)、`"deprecation"`(忽略过时API警告)

   • 例子:

     ```java
     @SuppressWarnings("unchecked")
     List list = new ArrayList(); // 我知道没写泛型,别提醒我了
     ```

二、框架篇:Spring家族常用注解

4. `@Controller` / `@Service` / `@Repository` - "我是特种兵!"
   • Spring给不同角色的类贴的标签:

     ◦ `@Controller`:处理网页请求的"门卫"

     ◦ `@Service`:处理业务的"服务员"

     ◦ `@Repository`:管数据库的"仓库管理员"

   • 例子:

     ```java
     @Controller
     public class UserController { ... } // 我是处理用户请求的
     ```

5. `@Autowired` - "快给我找个合适的来!"
   • 贴在字段或构造方法上,相当于说:"Spring大哥,帮我自动找个合适的对象塞进来"

   • 例子:

     ```java
     @Autowired
     private UserService userService; // 随便给我个UserService就行
     ```

6. `@RequestMapping` - "找我请按门牌号!"
   • 贴在Controller类或方法上,定义访问路径

   • 例子:

     ```java
     @RequestMapping("/user")
     public class UserController {
         @RequestMapping("/list")
         public String list() { ... } // 访问路径是 /user/list
     }
     ```

三、偷懒神器:Lombok注解

7. `@Getter` / `@Setter` - "别写get/set方法了!"
   • 自动生成字段的getter和setter方法

   • 例子:

     ```java
     @Getter @Setter
     public class User {
         private String name; // 自动生成getName()和setName()
     }
     ```

8. `@Data` - "全家桶套餐!"
   • 一次性包含`@Getter`、`@Setter`、`@ToString`、`@EqualsAndHashCode`等

   • 例子:

     ```java
     @Data
     public class User {
         private String name;
         private int age; // 自动生成所有常用方法
     }
     ```

9. `@Builder` - "链式构造了解一下!"
   • 自动生成建造者模式的代码

   • 例子:

     ```java
     @Builder
     public class User {
         private String name;
         private int age;
     }
     // 使用:User.builder().name("张三").age(20).build();
     ```

四、测试篇:JUnit注解

10. `@Test` - "我是测试用例!"
    ◦ 标记这是一个测试方法

    ◦ 例子:

      ```java
      @Test
      public void testAdd() {
          assertEquals(3, 1+2); // 测试1+2是否等于3
      }
      ```

11. `@Before` / `@After` - "测试前后我要做点事!"
    ◦ `@Before`:每个测试方法执行前先执行我

    ◦ `@After`:每个测试方法执行后要执行我

    ◦ 例子:

      ```java
      @Before
      public void setUp() { System.out.println("测试要开始了"); }
      
      @After 
      public void tearDown() { System.out.println("测试结束了"); }
      ```

五、数据库篇:JPA/Hibernate注解

12. `@Entity` - "我是数据库表!"
    ◦ 标记这个类对应数据库中的一张表

    ◦ 例子:

      ```java
      @Entity
      public class User { ... } // 对应数据库user表
      ```

13. `@Id` - "我是主键!"
    ◦ 标记这个字段是表的主键

    ◦ 例子:

      ```java
      @Id
      private Long id; // 这是主键字段
      ```

14. `@Column` - "我是表字段!"
    ◦ 标记字段对应表的列,可以指定列名等属性

    ◦ 例子:

      ```java
      @Column(name = "user_name")
      private String name; // 对应user_name列
      ```

总结:注解就像便利贴

• 给编译器看的:如`@Override`、`@Deprecated`

• 给框架看的:如Spring的`@Controller`、JPA的`@Entity`

• 给工具看的:如Lombok的各种注解

• 给测试工具看的:如JUnit的各种注解


记住:注解本身不做任何事情,它们只是提供信息,真正干活的是读取这些注解的处理器或框架!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode chrome调试怎么在所有浏览器都好使

chrome调试时只能在打开的浏览器里进行调试,其它打开的chrome浏览器就不能调试了,怎么解决。 右键点击 Chrome 的快捷方式图标,选择属性 在目标一栏,最后加上--remote-debugging-port9222 注意要用空格隔开 lanch.json 文件配置 …

Unity PBR基础知识

PBR原理 基于物理的渲染(Physically Based Rendering,PBR)是指使用基于物理原理和微平面理论建模的着色/光照模型,以及使用从现实中测量的表面参数来准确表示真实世界材质的渲染理念。 PBR基础理念 微平面理论(Micr…

COM组件使用方法

普通COM组件(如DLL)仅暴露方法/属性接口,而ActiveX控件(如OCX)需要可视化交互(如按钮、表格),需通过 ​​AxInterop​​ 包装器实现宿主环境集成。 项目中引入ActiveX控件流程如下。…

在 Spring Boot 项目中如何使用索引来优化 SQL 查询?

在 Spring Boot 项目中使用索引来优化 SQL 查询是提升数据库性能最常用的方法之一。下面是详细的步骤和实践指南: 核心目标:让数据库能够通过扫描索引(小范围、有序的数据结构)快速定位到所需数据行,而不是扫描整个表…

Vue3生产环境与Vue Devtools

在 Vue 3 的生产环境中,默认情况下 Vue Devtools 是无法正常使用 的,但开发者可以通过配置强制启用。以下是关键信息总结: 📌 核心结论 默认不可用 Vue 3 生产构建会移除 Devtools 支持以优化性能和安全性。 可强制启用 通过构建…

ARP渗透学习1

ARP协议工作原理 1. 什么是ARP ARP定义: 地址解析协议(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。 2. 工作原理 ARP表: 每台计算机都需要一个ARP表,用来保存IP地址和MAC地址的映射关系。查询过…

甲骨文云2025深度解析:AI驱动的云原生生态与全球化突围

一、战略转型:从数据库巨头到AI云服务先锋 1. 技术重心向AI与云深度迁移 甲骨文在2025年加速向AI原生云架构转型,其核心战略围绕生成式AI与量子计算展开。通过推出Oracle 23ai自治数据库,深度集成AI向量搜索功能,并重构云基础设…

【网络原理】TCP异常处理(二):连接异常

目录 一. 由进程崩溃引起的连接断开 二. 由关机引起的连接断开 三. 由断电引起的连接断开 四. 由网线断开引起的连接断开 一. 由进程崩溃引起的连接断开 在一般情况下,进程无论是正常结束,还是异常崩溃,都会触发回收文件资源,…

想做博闻强记的自己

2025年4月29日,13~25℃,还好 待办: 冶金《物理》期末测试 阅卷(冶金《物理》期末测试试卷) 重修《物理》《物理2》电子材料归档 规则变更,《高等数学2》期末试卷推倒重来 遇见:直播画面。 感受…

IP属地是实时位置还是自己设置

刷微博、抖音时,评论区总能看到“IP属地”?这个突然冒出来的小标签,让不少网友摸不着头脑:‌IP属地是实时位置,还是可以自己设置?‌别急,今天咱们就来聊聊这个话题! 1、什么是IP属地…

水力压裂多裂缝扩展诱发光纤应变演化试验研究

1.概述 本文基于OFDR技术的光纤应变监测方法,监测了真三轴条件下人造岩石试样与页岩的水力压裂试验。结果表明,OFDR技术能以毫米级分辨率实时监测裂缝起裂、扩展及闭合全过程,并建立基于应变演化的裂缝判别准则,为光纤压裂监测的…

4、RabbitMQ的七种工作模式介绍

目录 一、Simple(简单模式) 1.1 概念 1.2 代码实现 消费者 运行结果 二、Work Queue(工作队列) 2.1 概念 1.2 代码实现 生产者 消费者 运行结果 三、Publish/Subscribe(发布/订阅模式) 3.1 概念 3.2 代码实现 生产者…

厚铜PCB钻孔工艺全解析:从参数设置到孔壁质量的关键控制点

在现代电子设备中,厚铜PCB(印刷电路板)扮演着至关重要的角色。它们不仅为电子元件提供了支撑,还实现了电路之间的连接。然而,在生产厚铜PCB时,钻孔是一个关键环节。本文将为您介绍厚铜PCB生产中钻孔的科普知…

缺口拼图,非线性坐标关联

继上一篇文章, 欢迎一起交流探讨 https://t.zsxq.com/GEIze

OTA(Over-The-Air)升级

简介: OTA(Over-the-Air)是一种通过无线方式进行数据传输和更新的技术,通常用于电子设备(如智能手机、汽车、物联网设备等)的软件、固件或配置更新。OTA可以在设备与服务器之间进行远程传输,用户…

fastapi和flaskapi有什么区别

FastAPI 和 Flask 都是 Python 的 Web 框架,但设计目标和功能特性有显著差异。以下是它们的核心区别: 1. ‌性能与异步支持‌ ‌FastAPI‌ 基于 ‌Starlette‌(高性能异步框架)和 ‌Pydantic‌(数据校验库)…

RCS认证是什么?RCS认证的好处?RCS认证所需要的资料

1. RCS(Recycled Claim Standard)认证 定义:由 Textile Exchange(纺织品交易所) 制定的国际标准,用于验证产品中回收材料(如再生纤维、塑料、金属等)的含量和供应链的可追溯性&…

10 基于Gazebo和Rviz实现导航仿真,包括SLAM建图,地图服务,机器人定位,路径规划

在9中我们已经实现了机器人的模块仿真,现在要在这个基础上实现SLAM建图,地图服务,机器人定位,路径规划 1. 还是在上述机器人的工作空间下,新建功能包(nav),导入依赖 gmapping ma…

OpenGL----OpenGL纹理与纹理缓存区

在现代计算机图形学中,纹理(Texture)是一个至关重要的概念。它不仅可以为几何体表面添加细节和真实感,还可以用于实现各种复杂的视觉效果和数据处理。在OpenGL中,纹理的应用范围非常广泛,从基本的颜色映射到高级的阴影映射、环境映射等。本文将深入探讨OpenGL纹理与纹理缓…

Scikit-learn工具介绍与数据集

一、Scikit-learn简介与安装 Scikit-learn是Python中最流行的机器学习库之一,它提供了简单高效的数据挖掘和数据分析工具。 Python语言机器学习工具 Scikit-learn包括许多智能的机器学习算法的实现 Scikit-learn文档完善,容易上手,丰富的A…