Java开发效率神器:Lombok从入门到精通!

🌈个人主页 :一条泥憨鱼 (欢迎各位大佬莅临)

🎬精选专栏:数据结构与算法JavaSE,苍穹外卖日记AI学习JavaWeb

引言

刚开始学习 Java 的时候,很多同学都会写这样的代码:

java 复制代码
public class User {

    private Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

看到这里是不是有点崩溃?

明明真正有用的代码只有三行属性:

java 复制代码
private Integer id;
private String name;
private Integer age;

结果却写了十几行 Getter、Setter。

如果项目里有:

复制代码
100个实体类
每个实体类10个字段

那将会产生:

复制代码
2000多个Getter和Setter方法

这时候就轮到 Lombok登场了。

Lombok 可以让你:

java 复制代码
@Data
public class User {

    private Integer id;
    private String name;
    private Integer age;
}

然后自动生成:

  • Getter

  • Setter

  • toString()

  • equals()

  • hashCode()

是不是瞬间舒服了很多?

今天我们就来彻底搞懂 Java 开发中的效率神器------Lombok。


什么是Lombok?

Lombok 是一个 Java 开发工具库。

官方网站对它的定义是:

通过注解的方式自动生成代码。

说白了:

Lombok 帮你写代码。

你可以理解成:

java 复制代码
程序员:
帮我生成Getter和Setter

Lombok:
好的,我来

这样开发者就不用重复编写大量模板代码。


为什么需要Lombok?

先看一个普通实体类。

java 复制代码
public class Student {

    private Integer id;
    private String name;
    private Integer age;

    public Student() {
    }

    public Student(Integer id,String name,Integer age) {
        this.id=id;
        this.name=name;
        this.age=age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id=id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name=name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age=age;
    }

    @Override
    public String toString() {
        return "Student{}";
    }
}

接近 50 行代码。

真正业务代码:

java 复制代码
private Integer id;
private String name;
private Integer age;

只有三行。

其余全是重复劳动。

Lombok 的出现就是为了减少这种机械式编码。


Lombok的安装

Maven项目

直接引入依赖:

java 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.38</version>
    <scope>provided</scope>
</dependency>

IDEA安装插件

很多新手都会遇到:

复制代码
代码不报错
但是注解变红

原因通常是:

复制代码
没有安装Lombok插件

安装步骤:

复制代码
Settings
↓
Plugins
↓
搜索Lombok
↓
Install
↓
重启IDEA

Lombok核心注解详解

实际开发中最常用的注解大概就十几个。

掌握这些基本够用了。


@Getter 和 @Setter

最基础的两个注解。

java 复制代码
@Getter
@Setter
public class User {

    private Integer id;
    private String name;
}

等价于:

java 复制代码
public Integer getId(){}

public void setId(Integer id){}

public String getName(){}

public void setName(String name){}

代码实例

java 复制代码
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {

    private Integer id;
    private String name;
}

测试:

java 复制代码
public class Test {

    public static void main(String[] args) {

        User user = new User();

        user.setId(1);
        user.setName("张三");

        System.out.println(user.getName());
    }
}

输出:

复制代码
张三

@ToString

自动生成 toString()。

java 复制代码
@ToString
public class User {

    private Integer id;
    private String name;
}

测试:

java 复制代码
User user = new User();

user.setId(1);
user.setName("张三");

System.out.println(user);

输出:

复制代码
User(id=1,name=张三)

再也不用手写 toString() 了。


@EqualsAndHashCode

自动生成:

java 复制代码
equals()
hashCode()

例如:

java 复制代码
@EqualsAndHashCode
public class User {

    private Integer id;
    private String name;
}

用于比较对象内容是否相同。


@NoArgsConstructor

生成无参构造。

java 复制代码
@NoArgsConstructor
public class User {

    private Integer id;
    private String name;
}

自动生成:

复制代码
public User() {
}

@AllArgsConstructor

生成全参构造。

java 复制代码
@AllArgsConstructor
public class User {

    private Integer id;
    private String name;
}

自动生成:

java 复制代码
public User(Integer id,String name){
    this.id=id;
    this.name=name;
}

@Data

这是使用频率最高的注解。

很多同学刚接触 SpringBoot 时几乎天天写。

java 复制代码
@Data
public class User {

    private Integer id;
    private String name;
}

它相当于:

java 复制代码
@Getter
@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor

一个顶五个。

因此实体类最常见写法:

java 复制代码
@Data
public class User {

    private Integer id;
    private String name;
    private Integer age;
}

@Builder

构建者模式。

这是企业开发中非常喜欢用的功能。

例如:

java 复制代码
@Builder
public class User {

    private Integer id;
    private String name;
    private Integer age;
}

创建对象:

java 复制代码
User user = User.builder()
        .id(1)
        .name("张三")
        .age(18)
        .build();

输出:

复制代码
System.out.println(user);

结果:

复制代码
User(id=1,name=张三,age=18)

为什么Builder这么好用?

传统写法:

java 复制代码
User user =
        new User(1,"张三",18);

你根本不知道:

复制代码
1是什么
张三是什么
18是什么

代码可读性很差。

Builder写法:

java 复制代码
.id(1)
.name("张三")
.age(18)

一眼就懂。


Lombok底层原理

很多人会问:

Lombok真的帮我生成代码了吗?

答案是:

复制代码
是的
但不是直接修改源码

Lombok工作流程:

复制代码
编写代码
      ↓
编译Java源码
      ↓
Lombok解析注解
      ↓
生成对应方法
      ↓
生成.class文件

举个例子:

源码:

java 复制代码
@Data
public class User {

    private String name;
}

编译后:

java 复制代码
public class User {

    private String name;

    public String getName(){}

    public void setName(){}

    public String toString(){}

    public boolean equals(){}

    public int hashCode(){}
}

这些代码在编译阶段已经生成好了。

所以 JVM 根本不知道 Lombok 的存在。


Lombok工作流程

完整流程:

复制代码
程序员写@Data
        ↓
Java编译器开始编译
        ↓
Lombok拦截编译过程
        ↓
自动生成代码
        ↓
生成字节码文件
        ↓
JVM运行

所以本质上:

复制代码
Lombok是编译期工具
不是运行期工具

这点面试经常考。


Lombok的优缺点

优点

1、减少模板代码

最明显的优势。

几十行代码变几行。


2、提高开发效率

开发速度提升明显。

特别是:

复制代码
SpringBoot
MyBatis
JPA

项目中。


3、代码更整洁

实体类更加清晰。


4、支持Builder模式

创建对象更加优雅。


缺点

1、隐藏代码

新手容易疑惑:

复制代码
明明没写Getter
为什么能调用?

2、依赖IDE插件

插件异常时容易报红。


3、调试不直观

生成代码不可见。

需要查看反编译结果。


实际开发场景

SpringBoot实体类

java 复制代码
@Data
public class User {

    private Long id;

    private String username;

    private String password;
}

这是最常见的写法。


DTO对象

java 复制代码
@Data
public class UserDTO {

    private String username;

    private String email;
}

VO对象

java 复制代码
@Data
public class UserVO {

    private Long id;

    private String username;
}

Builder构建复杂对象

java 复制代码
User user = User.builder()
        .id(1L)
        .name("张三")
        .age(18)
        .build();

在微服务项目中特别常见。


扩展

1、Lombok是什么?

通过注解自动生成 Java 模板代码的工具。


2、@Data包含哪些注解?

java 复制代码
@Getter
@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor

3、Lombok什么时候生成代码?

复制代码
编译阶段

不是运行阶段。


4、Lombok底层原理是什么?

通过 **Annotation Processor(注解处理器)**在编译阶段修改抽象语法树并生成代码。


5、Lombok会影响程序运行效率吗?

不会。

因为生成的代码已经写入字节码文件。

运行时和手写代码没有本质区别。


总结

Lombok 可以说是 Java 开发中最受欢迎的工具之一。

它最大的价值就是:

复制代码
减少重复代码
提高开发效率
让代码更简洁

对于新手来说,记住最常用的几个注解即可:

java 复制代码
@Data

@Getter

@Setter

@NoArgsConstructor

@AllArgsConstructor

@Builder

最后送大家一句开发中的经典名言:

程序员的时间应该花在业务逻辑上,而不是一遍又一遍地写 Getter 和 Setter。

而 Lombok,正是帮我们解决这个问题的效率神器。

相关推荐
red_redemption1 小时前
自由学习记录(201)
学习
Jinkxs2 小时前
Python基础 - 初识内置函数 Python自带的便捷工具
android·java·python
熠熠仔2 小时前
Spring Boot 与 MyBatis-Plus 空间几何数据集成指南
spring boot·后端·mybatis
AI 小老六2 小时前
Google AX 控制面拆解:分布式 Agent 如何把断点恢复、审计策略和执行调度收进同一条链路
人工智能·分布式·后端·ai·架构·ai编程
奥利奥夹心脆芙2 小时前
零基础调试 Java 代码:Gemini 报错排查完整实操指南
java
YHHLAI2 小时前
从零搭建一个 RESTful Todo 服务 —— Bun + TypeScript 全栈最小闭环
后端·typescript·restful
小闹5492 小时前
一个 65 行的小需求,我让 Claude Code 跑了 25 个 agent、整整两小时
后端·claude
天青色等烟雨..2 小时前
智慧农林核心遥感技术99个案例实践
运维·人工智能·spring boot·后端·自动化
西安邮电大学2 小时前
贪心算法详细讲解
java·后端·其他·算法·面试