0

0

使用 Project Lombok 增强 Java:简化您的代码,提高您的工作效率

花韻仙語

花韻仙語

发布时间:2024-11-01 19:56:11

|

406人浏览过

|

来源于dev.to

转载

使用 project lombok 增强 java:简化您的代码,提高您的工作效率

java 以其冗长而闻名,尤其是在处理重复的样板代码(如 getter、setter、构造函数和 tostring 方法)时。虽然有必要,但这种混乱会减慢开发速度,并使代码更难以阅读和维护。 lombok 项目通过在编译时自动生成样板代码来解决这个问题。

在本指南中,我们将深入探讨为什么 lombok 是 java 中的必备工具、如何设置它,并深入幕后了解 lombok 如何使用注释处理来映射和修改 java 的抽象语法树(ast),确保我们的代码简洁而不牺牲功能。

为什么我们需要龙目岛?

java 需要大量的样板代码。考虑一个简单的 pojo,其中包括字段、构造函数、getter、setter 和 tostring 方法:

public class user {
    private string name;
    private int age;

    public user(string name, int age) {
        this.name = name;
        this.age = age;
    }

    public string getname() {
        return name;
    }

    public void setname(string name) {
        this.name = name;
    }

    public int getage() {
        return age;
    }

    public void setage(int age) {
        this.age = age;
    }

    @override
    public string tostring() {
        return "user{name='" + name + "', age=" + age + '}';
    }
}

这对于小型项目来说是可以管理的,但随着应用程序规模的扩大,样板文件很快就会变得不堪重负。

解决方案:龙目岛

立即学习Java免费学习笔记(深入)”;

使用 lombok,我们可以避免所有这些重复的代码。这是同一个类在 lombok 中的样子:

import lombok.data;

@data
public class user {
    private string name;
    private int age;
}

只需一个注解,lombok 就可以生成 getter、setter、tostring、equals 和 hashcode 方法,使代码更干净、更易于维护。

如何设置龙目岛

第1步:添加lombok依赖

要在 maven 项目中使用 lombok,请将此依赖项添加到 pom.xml:


    org.projectlombok
    lombok
    1.18.28
    provided

对于 gradle:

compileonly 'org.projectlombok:lombok:1.18.28'
annotationprocessor 'org.projectlombok:lombok:1.18.28'

第 2 步:ide 设置

确保您的 ide 已安装 lombok 插件。在 intellij idea 中:

1.  go to settings > plugins.
2.  search for lombok.
3.  install the lombok plugin.
4.  enable annotation processing under settings > build, execution, deployment > compiler > annotation processors.

lombok 的工作原理:幕后花絮

注释处理的力量

lombok 使用 java 注释处理器与 java 抽象语法树 (ast) 进行交互。注释处理器在编译过程中分析并可能修改代码的结构。 lombok 的注释处理器利用它来生成 getter、setter 和 tostring 等方法,在代码编译之前将它们直接插入到 ast 中。

理解抽象语法树 (ast)

ast 是代码的内部表示,将源代码分解为编译器可以处理的结构化树。当您编写 java 代码时,每个元素(如类、字段、方法)都会映射到 ast 中的一个节点。

当lombok的注释处理器遇到带有lombok注释的类时,它会修改ast节点以将方法直接添加到树中。这意味着样板方法是在编译期间生成的,而不是源代码的一部分。当代码编译时,它已经添加了所有必要的方法,这就是它们无缝工作的原因。

时机:lombok 何时以及如何生成代码

lombok 的注释在编译阶段(解析 java 源代码和生成字节码之间)进行处理。以下是分步过程:

ShoopD 网上商店系统
ShoopD 网上商店系统

用 php + mysql 驱动的在线商城系统,我们的目标为中国的中小企业及个人提供最简洁,最安全,最高效的在线商城解决方案,使用了自建的会员积分折扣功能,不同的会员组有不同的折扣,让您的商店吸引更多的后续客户。 系统自动加分处理功能,自动处理会员等级,免去人工处理的工作量,让您的商店运作起来更方便省事 采用了自建的直接模板技术,免去了模板解析时间,提高了代码利用效率 独立开发的购物车系统,使用最

下载
1.  ast creation: the compiler reads the java source code and generates the ast.
2.  annotation processing: lombok’s annotation processor scans the ast for lombok annotations.
3.  ast manipulation: when an annotation like @getter or @setter is found, lombok adds nodes to the ast to represent the corresponding methods.
4.  bytecode generation: the modified ast is used to generate the final bytecode, which includes the methods added by lombok.

因此,当您运行代码时,getter、setter 和其他方法看起来就像是原始源代码的一部分,即使它们是在编译时添加的。

lombok 注解解释

  • @getter 和 @setter

这些注释会为您的字段生成 getter 和 setter 方法,有效地节省您自己编写它们的精力。

import lombok.getter;
import lombok.setter;

@getter
@setter
public class user {
    private string name;
    private int age;
}
  • @tostring

@tostring 生成一个 tostring 方法,默认包含所有字段,并且可以选择排除特定字段。

import lombok.tostring;

@tostring(exclude = „password“)
public class user {
    private string name;
    private int age;
    private string password;
}
  • @equalsandhashcode

生成 equals 和 hashcode 方法。这些方法对于比较对象以及在 hashmap 或 hashset 等集合中使用它们至关重要。

import lombok.equalsandhashcode;

@equalsandhashcode
public class user {
    private string name;
    private int age;
}
  • @noargsconstructor、@allargsconstructor 和 @requiredargsconstructor

这些注释生成具有不同参数选项的构造函数。

• @noargsconstructor: no-argument constructor.
• @allargsconstructor: constructor with parameters for all fields.
• @requiredargsconstructor: constructor for fields marked final or @nonnull.
import lombok.noargsconstructor;
import lombok.allargsconstructor;
import lombok.requiredargsconstructor;

@noargsconstructor
@allargsconstructor
@requiredargsconstructor
public class user {
    private final string name;
    private int age;
}
  • @数据

组合@getter、@setter、@tostring、@equalsandhashcode 和@requiredargsconstructor。

import lombok.data;

@data
public class user {
    private string name;
    private int age;
}
  • @builder

实现构建器模式,这对于构造具有多个参数的复杂对象特别有用。

import lombok.builder;

@builder
public class user {
    private string name;
    private int age;
}

用法:

user user = user.builder()
    .name("john doe")
    .age(30)
    .build();
  • @slf4j(日志记录)

提供 slf4j logger 实例,简化日志记录设置。

import lombok.extern.slf4j.slf4j;

@slf4j
public class userservice {

    public void createuser() {
        log.info("user is being created");
    }
}

spring boot 应用程序中的 lombok

lombok 的功能在 spring boot 应用程序中特别有用,在这些应用程序中,样板代码可以轻松地累积在服务、存储库和模型中。以下是在 spring boot 服务中使用 lombok 的示例:

import lombok.requiredargsconstructor;
import lombok.extern.slf4j.slf4j;
import org.springframework.stereotype.service;

@slf4j
@service
@requiredargsconstructor
public class userservice {

    private final userrepository userrepository;

    public void saveuser(user user) {
        log.info("saving user: {}", user);
        userrepository.save(user);
    }
}

在此示例中:

• @RequiredArgsConstructor generates a constructor for userRepository, which Spring Boot uses for dependency injection.
• @Slf4j adds a logger, so we don’t need to manually define a logging instance.




结论

lombok 对于 java 开发人员来说是一个非常宝贵的工具。它显着减少了样板代码,保持类干净,并提高了生产力。通过使用注释处理来操作 ast,lombok 在编译期间直接注入方法,确保代码简洁而不影响功能。

与 spring boot 结合使用时,lombok 进一步简化了开发。 @data、@builder 和 @slf4j 等注释提供了一种强大的方法来编写干净、可维护的代码,并且易于扩展和调试。

如果您使用 java,lombok 是您工具包中的必备工具。当 lombok 可以处理时,为什么要编写不必要的代码呢?

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

868

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

745

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

741

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

420

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

447

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

431

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16948

2023.08.03

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号