(二十六)【安装】【使用】第三方【lombok】注解工具
前文
属性装数据 + 方法做功能 + 注解(相当于打标签注意哈他给类也能打标签)=三样凑成类(这就是孙悟空的图纸还没活),new 就是对象(他就是活的孙悟空)。
我按照图纸造出来的一个有着孙悟空所有技能的原始本体,但他不是孙悟空因为他还没活过来。我现在new一个名字,不叫孙悟空,叫猪八戒,他活过来就叫猪八戒,但拥有了孙悟空的所有技能 。并且给他注解好,他有孙悟空的所有技能,但形是猪八戒,名字叫猪八戒。这就叫注解。
而反射就是仙法”白眼”-(透视扫描功能+万能操作器)我不用知道你对象是猪八戒还是孙悟空,我用反射一眼看穿里面的方法啊注解啊属性啊,你外面穿了个猪八戒的形,内是孙悟空的技能我看的一清二楚。同时还能反射随时修改+调用属性、注解、方法,唯独改不了它天生的本源类图纸,也不能随便改注解标签。
lombk注解是第三方注解和上文的原生注解是2回事
常用原生注解 VS Lombok注解 对照表(超好记)
一、Java 原生自带注解(不用引任何依赖,JDK 就有)
|
原生注解 |
作用大白话 |
会不会自动生成代码 |
|
@Override |
告诉编译器:我重写了父类方法,防止写错方法名 |
❌ 不会,只是标记 |
|
@Deprecated |
标记这个类 / 方法过时了,不建议再用 |
❌ 只是标记提醒 |
|
@SuppressWarnings |
压制黄色警告,不让编辑器飘黄线 |
❌ 只是屏蔽警告 |
|
@FunctionalInterface |
标记函数式接口,只能有 1 个抽象方法 |
❌ 只是规则限制 |
�� 共同点:
都是 纯标记,只起提示、约束作用,不会帮你多写一行代码。
二、Lombok 第三方注解(要引依赖、装插件)
|
Lombok 注解 |
作用大白话 |
会不会自动生成代码 |
|
@Data |
一键生成 get、set、toString、equals、hashCode |
✅ 全自动生成 |
|
@NoArgsConstructor |
自动生成无参构造 |
✅ 自动造构造方法 |
|
@AllArgsConstructor |
自动生成全参构造 |
✅ 自动造构造方法 |
|
@Getter |
只给所有字段生成 get 方法 |
✅ 自动生成 |
|
@Setter |
只给所有字段生成 set 方法 |
✅ 自动生成 |
|
@Builder |
生成链式建造者模式 |
✅ 自动生成 |
|
@Slf4j |
自动给类生成 log 日志对象 |
✅ 自动生成 |
�� 共同点:
都是第三方注解,不止标记,编译时偷偷帮你把重复代码全写好。
三、一句话终极区分
- Java 原生注解:只是打标签、做提醒,代码还得你自己写;
- Lombok 注解:打标签 + 帮你自动生成一堆重复代码。
四、补充:还有 Spring 注解(也算第三方注解)
比如 @Controller、@Service、@RequestMapping
也是第三方注解,和 Lombok 一样不是 JDK 自带,
只不过作用不一样:
- Lombok:帮你省手写代码
- Spring 注解:帮你做项目托管、路由、分层
这下三种注解:原生、Lombok、Spring 你彻底分得清了。
@Data 一键生成get/set等方法的原理
核心结论:@Data 能一键生成代码,本质是 Lombok 借助 Java 注解处理器(Annotation Processor),在编译阶段“偷偷帮你写好代码”,不是运行时生成,也不是“魔法”,只是帮你省去了手动书写的麻烦。
一、关键前提(你已经满足)
你之前已经做了2件事,这是@Data能生效的基础,缺一不可:
- 项目引入了 Lombok 依赖:依赖里包含了@Data注解的定义,以及“生成代码的工具(注解处理器)”;
- IDE 安装了 Lombok 插件:让 IDE 能识别@Data注解,不会报红(比如找不到get/set方法),但插件不负责生成代码,只是“识别”。
二、@Data 生成代码的完整流程(一步一步讲懂)
你写的代码 → 编译器编译 → Lombok 介入 → 生成完整代码 → 最终运行,具体分3步:
1. 你写的简化代码(仅字段+@Data)
这是你实际写的内容,非常简洁:

|
java |
2. 编译阶段:Lombok 注解处理器“干活”
当你点击“运行”或“编译”时,Java 编译器会先执行“注解处理”步骤:
- 编译器会扫描你的代码,发现 Account 类上有 @Data 注解;
- 此时,Lombok 提供的“注解处理器”会被触发(这个处理器就是你引入的 Lombok 依赖里的代码);
- 注解处理器会“读取”Account 类里的所有字段(id、name、password),然后按照固定规则,自动生成 get/set、toString、equals、hashCode 这5类方法的代码。
3. 最终生成的完整代码(你看不到,但实际存在)
Lombok 生成代码后,会把生成的代码“注入”到编译后的字节码(.class 文件)中,相当于编译器最终看到的代码是这样的(你不用写,Lombok 自动补全):

|
java |
三、关键注意事项(新手必看)
- 生成时机:只在编译阶段生成,运行时不会再生成,所以运行速度和你手动写代码完全一样,不影响性能;
- 看不到生成的代码:你在 IDE 里只能看到自己写的简化代码,生成的代码藏在编译后的 .class 文件里(可以通过 IDE 反编译查看);
- 不影响原有代码:如果你来手动写了某个方法(比如自己重写了 toString),Lombok 会“让步”,不会重复生成这个方法;
- 依赖和插件缺一不可:少了依赖,注解处理器不存在,无法生成代码;少了插件,IDE 识别不了注解,会报红(但编译运行能正常生效)。
四、一句话总结(好记不绕)
@Data 就像一个“编译期的自动打字员”,你给它标上注解、写下字段,它就会在编译器编译代码时,自动帮你把 get/set、toString 等重复代码全部敲好,省你手动书写的时间。
🔥 Lombok 10 大常用注解 + 示例代码
1. @Data(全能王)
生成:get、set、toString、equals、hashCode
import lombok.Data;
@Data
public class User {
private Integer id;
private String name;
}
// 使用
User user = new User();
user.setId(1); // set自动生成
user.getName(); // get自动生成
user.toString(); // 自动生成
2. @NoArgsConstructor(无参构造)
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class User {
private Integer id;
}
// 使用
User user = new User(); // 无参构造
3. @AllArgsConstructor(全参构造)
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class User {
private Integer id;
private String name;
}
// 使用
User user = new User(1, "张三");
4. @Getter(只生成 get)
import lombok.Getter;
@Getter
public class User {
private Integer id;
}
// 使用
user.getId(); // 只有get,没有set
5. @Setter(只生成 set)
import lombok.Setter;
@Setter
public class User {
private Integer id;
}
// 使用
user.setId(100); // 只有set
6. @ToString(只生成 toString)
import lombok.ToString;
@ToString
public class User {
private Integer id;
private String name;
}
// 使用
System.out.println(user); // 自动打印所有字段
7. @EqualsAndHashCode
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class User {
private Integer id;
}
// 使用
user1.equals(user2); // 自动比较字段
8. @Builder(链式构造,超级好用)
import lombok.Builder;
@Builder
public class User {
private Integer id;
private String name;
}
// 使用(链式写法)
User user = User.builder()
.id(1)
.name("张三")
.build();
9. @Slf4j(日志,不用自己创建 log 对象)
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Test {
public void test() {
log.info("日志输出"); // 直接用
}
}
10. @RequiredArgsConstructor(给 final 字段生成构造)
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class User {
private final Integer id;
private String name;
}
// 使用:只生成包含 final 字段的构造
User user = new User(100);
✅ 工作最常用组合(必背)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
private Integer id;
private String name;
}
安装lombok工具
https://projectlombok.org/官方网站





更多推荐




所有评论(0)