【Lombok】Java开发神器Lombok使用详解

超全一篇Lombok使用讲解,及原理,真香啊 简介 Lombok 是一款好用顺手的工具,就像 Google Guava 一样。可用来帮助开发人员消除 Java 的冗长代码,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。 通过在开发环境中实现 Lombok,开发人员可以节省构建诸如hashCode()和equals()这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。 IntelliJ 安装 Lombok 通过 IntelliJ 的插件中心安装 Install Plugi 阅读详情

引言

开发中经常要创建一些实体类并要添加getter/setter方法、构造方法、toString方法等重复性工作,虽然IDEA有快捷键ALT+INSERT快速实现,但我们想通过某种方式可以自动生成。这个时候就需要用到本篇的主角——Lombok。

简介

Lombok是一款Java开发插件,可以通过它定义的注解来精简代码,主要针对简单的Java模型对象(Plain Ordinary Java Object,即POJO)。特别是当POJO类的属性增减时,这个时候如果使用注解,则不需要额外的操作,否则的话还得重新构建。而且Lombok针对这些内容的处理是在编译期,而不是通过反射机制。

安装

本篇是基于IDEA介绍。在IDEA中打开Settings—>Plugins,搜索Lombok,如下图所示,点击安装,然后重启IDEA。
在这里插入图片描述
插件安装完成后在使用时需要在pom.xml中配置:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
</dependency>

使用说明

1. 作用在类上
1.1. @Data

@Data最常用的注解之一。作用在类上,提供该类所有属性的get/set方法,还提供了equals、canEqual、hashCode、toString方法。并且默认是无参构造方法。
程序清单1:@Data注解

/**
 * @author Carson Chu, 1965704869@qq.com
 * @date 2020/2/3 20:00
 * @description
 */
@Data
public class UserInfoModel {
    private String username;

    private String password;

    private Integer age;

    public static void main(String[] args) {
        UserInfoModel userInfoModel = new UserInfoModel();
        userInfoModel.setUsername("Carson");
        /* carson==>UserInfoModel(username=Carson, password=null, age=null) */
        System.out.println(userInfoModel.getUsername() + "==>" + userInfoModel.toString());
    }
}
1.2. @Value

作用于类上,会生成含所有参数的构造方法、get方法、equals、hashCode、toString方法。与@Data相比,多了全参构造方法,少了默认构造方法、set方法和canEqual方法。

需要注意的是:该注解会将字段添加上final修饰,个人感觉没有太大必要,开发中尽量少使用。

程序清单2:@Value注解

/**
 * @author Carson Chu, 1965704869@qq.com
 * @date 2020/2/3 20:00
 * @description
 */
@Value
public class UserInfoModel {
    private String username;

    private String password;

    private Integer age;

    public static void main(String[] args) {
        UserInfoModel userInfoModel = new UserInfoModel("Carson","2020",18);
        /* Carson==>UserInfoModel(username=Carson, password=2020, age=18) */
        System.out.println(userInfoModel.getUsername() + "==>" + userInfoModel.toString());
    }
}
1.3. @Setter和@Getter

@Setter和@Getter用法相同,都可以作用在类上和变量上,当作用在类上,就是对类中所有属性生成set或者get方法,当作用在变量上,则是对特定的变量生成set或者get方法。
程序清单3:@Setter和@Getter注解

@Setter
public class UserInfoModel {
    private String username;

    private String password;

    @Getter
    private Integer age;
}
1.4. @Log4j

作用于类上,为该类提供一个参数名为log的Log4j的日志对象。
程序清单4:@Log4j注解

@Log4j
public class UserInfoModel {
    public static void main(String[] args) {
        log.info("@Log4j");
    }
}
1.5. @AllArgsConstructor和@NoArgsConstructor

两个注解都作用于类上,@AllArgsConstructor为该类提供一个包含所有参数的构造方法。@NoArgsConstructor提供一个无参的构造方法,它可以和@AllArgsConstructor同时使用,此时会生成两个构造方法:无参构造方法和全参构造方法。
程序清单5:@AllArgsConstructor和@NoArgsConstructor注解

@AllArgsConstructor
@NoArgsConstructor
public class UserInfoModel {
    private String username;
    private String password;
    
    public static void main(String[] args) {
        UserInfoModel userInfoModel=new UserInfoModel();
        UserInfoModel userInfoModel1=new UserInfoModel("Carson","2020");
    }
}
1.6. @RequiredArgsConstructor

作用于类上,由类中所有带有@NonNull注解(接下来会说明)或者带有final修饰的成员变量作为参数生成构造方法。
程序清单6:@RequiredArgsConstructor注解

@RequiredArgsConstructor
public class UserInfoModel {
    private final String username;
    private String password;
    @NonNull
    private Integer age;

    public static void main(String[] args) {
        UserInfoModel userInfoModel = new UserInfoModel("Carson", 18);
    }
}
1.7. @Builder

作用于类上,支持Builder的流式操作。

1.8. @ToString

作用于类上,生成包含所有参数的toString方法。

2. 作用在变量上
2.1 @NonNull

作用于变量上,提供关于此参数的非空检查,如果参数为空,则抛出空指针异常。如下图所示,我们已经知道@Data会默认生成无参构造方法,但是当类中有参数被@NonNull修饰之后,无参构造方法将会失效,取而代之的是由所有@NonNull注解的变量组成的有参构造方法。
在这里插入图片描述

3. 作用在方法上
3.1 @Synchronized

作用于类方法或实例方法上,效果与synchronized相同。区别如下表所示:

加锁方式作用域加锁对象
synchronized类方法类的Class对象
synchronized实例方法this对象
@Synchronized类方法private static final对象
@Synchronized实例方法private final对象

当注解@Synchronized作用在非静态方法时,需要在注解中指向一个自定义的private final锁对象。
程序清单7:@Synchronized注解

public class UserInfoModel {

    private final Object LOCK = new Object();

    private static Integer staticCounter;

    @Synchronized
    public static int incr() {
        return ++staticCounter;
    }

    @Synchronized("LOCK")
    public int decr() {
        return --staticCounter;
    }
}

该类编译之后的class文件为:

public class UserInfoModel {
    private static final Object $LOCK = new Object[0];
    private final Object LOCK = new Object();
    private static Integer staticCounter;

    public UserInfoModel() {
    }

    public static int incr() {
        synchronized($LOCK) {
            return staticCounter = staticCounter + 1;
        }
    }

    public int decr() {
        synchronized(this.LOCK) {
            return staticCounter = staticCounter - 1;
        }
    }
}

可以看到,程序为@Synchronized注解作用的静态方法自动创建了一个private static final类型的锁对象private static final Object $LOCK = new Object[0];。

3.1 @SneakyThrows

作用于方法上,相当于把方法内的代码添加了一个try-catch处理。

小结

在本篇末对Lombok做个小结,说一下个人的看法,此神器虽然好用,但是在代码的可读性方面却是不如手动生成的get/set、toString方法。开发工具虽然带来了极大的便利,但软件开发人员还是不应该过于依赖工具。该需要亲自动手去实现的还是踏实一点,千里之行,始于足下。

AMBA总线—APB总线协议详解 文章目录一、APB总线介绍1.1.什么是APB总线1.2.典型的基于 AMBA 总线的系统架构1.3.APB信号列表(重点)二、APB总线传输(时序)2.1.APB 状态机2.2.写操作(重要)2.3.读操作(重要)2.4.APB组件接口(重要)2.4.1.APB Bridge框图2.4.2.APB Slave框图三、APB到AHB的接口3.1.读操作3.2.写操作3.3.读写交替传送 一、APB... 阅读详情

相关推荐

手把手教你用STM32+LAN8720搭建以太网通信模块(含原理图)

本文详细介绍了如何使用STM32微控制器与LAN8720物理层芯片搭建以太网通信模块,涵盖硬件设计、软件配置及常见问题排查。重点讲解了LAN8720的低功耗设计、RMII接口简化布线等特性,以及STM32CubeMX配置和LwIP协议栈移植技巧,助力开发者快速实现稳定可靠的嵌入式网络通信。

CAT789的专栏 413

Lombok基本使用方法

1.认识Lombok Lombok: lombok是一个java库,它可以自动插入到编辑器和构建工具中,提高java的效率 我们不用再编写另一个getter或equals方法,使用一个注释,您的类有一个功能齐全的生成器,自动记录变量等 场景:编写一个实体类,编写需要的属性类型 属性后,我们需要构建无参和有参构造器,getter和setter,重写toString方法 通过注解引入Lombok后,我们只需要编写需要的属性类型 属性即可,构造器、toString方法可以通过对应的注解实现,不在需要我们构建

Riove的博客 8679

高速DAC时钟与配置实战:DAC5681Z硬件设计与寄存器编程详解

在高速数据转换系统中,时钟信号是决定系统性能的核心要素,其稳定性和纯净度直接影响数模转换器(DAC)的输出频谱纯度与动态范围。时钟电路的设计原理涉及信号完整性、阻抗匹配与直流偏置,而内部锁相环(PLL)和延迟锁相环(DLL)的配置则是实现精确时序控制的关键技术。这些技术的价值在于,它们共同保障了高速通信、雷达和任意波形生成等应用对信号实时性与精度的严苛要求。本文聚焦于德州仪器(TI)的DAC5681Z,深入解析其外部时钟输入电路的硬件设计要点,包括端接电阻的计算与选型,并详细拆解通过串行外设接口(SPI)对

weixin_30342363的博客 186

记lombok@Data和@Builder一起用无法添加无参构造方法的坑

今天和小伙伴讨论一个mybatis-plus的一个诡异问题,最后定位到原因竟然是lombok@Data和@Builder一起用无法添加无参构造方法引起的,非常隐蔽。 很多框架都是同反射等调用无参数构造方法来创建实例的,需要注意。 单独使用@Data注解,会生成无参数构造方法。 // IntelliJ API Decompiler stub source generated...

悟鸣的技术博客 3万+

SAP S/4HANA 可扩展性 – 面向初学者的简化指南

可扩展性(Extensibility)是 SAP ECC 和 SAP S/4HANA 的一项关键功能。它使客户能够通过定制其业务流程来创造竞争优势,并使合作伙伴能够通过量身定制的解决方案来丰富核心 ECC 或 S/4HANA。在过去的几十年中,SAP 的 on-premise 版本客户和合作伙伴主要使用经典的 ABAP 扩展性来扩展他们的 ERP 解决方案。经典扩展性允许 ABAP 开发人员使用甚至修改所有 SAP 对象。尽管经典扩展性非常强大和灵活,但在当今的云世界中,它已不再是一个好的选择。

SAP学习成长之路的博客 1809

Windows 本地安装 OpenClaw(龙虾)完整教程(纯净无广告)

《Windows系统OpenClaw本地AI网关安装指南》 本文提供Windows 10/11系统下OpenClaw(龙虾)AI网关的完整部署教程,包含: 环境配置:Node.js安装验证 核心安装:npm全局部署OpenClaw 模型对接:以DeepSeek为例配置API 扩展功能:飞书机器人集成方法 日常管理:启停命令/Web面板访问 卸载清理:完整移除服务与残留 教程涵盖初始化配置、技能管理、常见问题排查,特别说明管理员权限要求及飞书配对流程,适合新手30分钟内完成本地AI网关搭建。通过命令行操作与W

qiuxunbin_csdn的博客 641

Lombok的使用

lombok简介、常用注解的基本使用

m0_62909831的博客 1695

【反卷积算法】Richardson-Lucy (RL) :通过不断迭代更新图像估计值

Richardson-Lucy(RL)反卷积算法:是一种基于最大似然估计(Maximum Likelihood Estimation, MLE)的图像去卷积方法,常用于去模糊和图像增强。通过不断地更新图像估计值,来最小化模糊图像和恢复图像之间的误差,逐步消除模糊,最终接近真实的原始图像,每次迭代都会根据当前估计的图像来修正下次迭代的结果。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 3038

Lombok超详解

以前的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString/构造方法;打印日志;I/O流的关闭操作等等,这些代码既没有技术含量,又影响着代码的美观,Lombok应运而生。LomBok可以通过注解,帮助开发人员消除JAVA中尤其是POJO类中的冗长代码。使用LomBok之前使用LomBok之后。

qq_53317005的博客 1万+

华为OD机试真题 新系统 2026-04-19 C语言 实现【8位LED控制器】

有一个8位LED控制器,包含8个LED灯(编号0-7),初始状态全灭,用8位二进制表示为:00000000。控制器可以接收以下三种指令: Lx:L表示点亮操作,x表示LED的编号(0一7),操作得到的结果是:点亮第x个LED灯,把状态设为1。 Dx:D表示熄灭操作,x表示LED的编号(0-7),操作得到的结果是:熄灭第x个LED灯,把状态设为0。 Tx:T表示切换操作,x表示LED的编号(0-7),操作得到的结果是:切换第x个LED灯的状态,若状态为0则变为1,为1则变为0。 现在给定一组指令字符串(0<

MISAYAONE的博客 148

一分钟详解PCL中点云配准技术

原文首发于微信公众号「3D视觉工坊」: 一分钟详解PCL中点云配准技术 本文是对前两篇文章:点云配准(一 两两配准)以及3D点云(二 多福点云配准)的补充,希望可以在一定程度上帮助大家对点云配准理解地更为深刻。 一 PCL中点云配准技术的简单实现 在同一文件夹下,有测试数据文件monkey.ply,该文件是利用Blender创建的默认Monkey模型。 利用如下代码,将初始点云(图中绿色点云)...

3D视觉工坊 3704

Java开发神器Lombok使用详解

最近正在写SpringBoot系列文章和录制视频教程,每次都要重复写一些Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等。甚是浪费时间,也影响代码的可读性。因此,今天就给大家推荐一款Java开发神器——Lombok,让代码更简单易读。 什么是Lombok Lombok是一款Java开发插件,可以通过它定义的注解来精简冗长和繁琐的代码,主...

程序新视界 2万+

【00】虹软2023届校招专场 ,计算机类笔试攻略(笔试考试时间、考察范围、笔试难度 等说明)

虹软科技2023校招笔试攻略:三大岗位类别(算法、算法优化、开发)分别于7月24日进行。题型包括选择题、编程题和问答题,其中算法类题目降低难度,编程题改为LeetCode模式。重点考察数学基础、机器学习、编程能力(C/C++/Python)、数据结构和算法优化等。建议根据投递岗位选择问答题,算法优化类注重系统知识和SIMD优化,开发类侧重多线程等实际应用能力。笔试结果将作为校招offer的重要参考。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 276

java lombok 使用_Java开发神器Lombok使用详解

最近正在写SpringBoot系列文章和录制视频教程,每次都要重复写一些Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等。甚是浪费时间,也影响代码的可读性。因此,今天就给大家推荐一款Java开发神器――Lombok,让代码更简单易读。什么是LombokLombok是一款Java开发插件,可以通过它定义的注解来精简冗长和繁琐的代码,主要针...

weixin_42362885的博客 302

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java lombok 视频_Java开发神器Lombok使用详解

最近正在写SpringBoot系列文章和录制视频教程,每次都要重复写一些Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等。甚是浪费时间,也影响代码的可读性。因此,今天就给大家推荐一款Java开发神器——Lombok,让代码更简单易读。什么是LombokLombok是一款Java开发插件,可以通过它定义的注解来精简冗长和繁琐的代码,主要针...

weixin_30864831的博客 105

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java开发神器之Lombok介绍

在面向对象编程中必不可少需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此。相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而需要重复写Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等。那么今天本文将向大家介绍一款在Eclipse/Intellij IDEA主流的开发环境...

成长中的巨人 9719

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java 开发效率神器 Lombok(含代码比对)

Java 开发效率神器 Lombok(含代码比对)

hangge的学习基地 186

java开发神器lombok

一、简介 Lombok是一个Java库,通过添加注解的方式,不需要为类编写setter、getter、equals、hashCode、toString方法,同时还可以生成日志变量。简化Java开发,提高java 开发效率。 使用 eclipse 或 idea 都需要先安装lombok jar包。lombok 官网https://projectlombok.org/ 下载lombok.jar 。...

Zllvincent的博客 1232

Java开发神器Lombok的使用与原理

https://blog.chuangzhi8.cn/2018/08/11/Java开发神器Lombok的使用与原理/#more 在面向对象编程中必不可少需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此。相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而需要重复写Getter/Setter、构造器方法、字符串输出的ToStrin...

乔志勇笔记 325

lombok java_Java开发神器Lombok的使用与原理

在面向对象编程中必不可少需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此。相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而需要重复写Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等。那么是否一款插件或工具能够替大家完成这些繁琐的操作呢?本文将向大家介绍一款在Eclip...

weixin_42349769的博客 311

Java开发必备神器:Lombok 使用详解与最佳实践

Lombok 是一款提升 Java 开发效率的利器,通过注解在编译期自动生成 getter、setter、toString、equals、hashCode、构造函数等样板代码,减少冗余。本文详解了 @Data、@Builder、@Slf4j 等常用注解的使用方法,介绍了 Lombok 工作原理、集成步骤、IDE 配置及最佳实践,帮助开发者告别重复代码,提升项目可读性与开发速度,是 Spring Boot 项目中不可或缺的工具之一。

weixin_67327688的博客 2069

JAVA开发神器LOMBOK使用详解

最近正在写SpringBoot系列文章和录制视频教程,每次都要重复写一些Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等。甚是浪费时间,也影响代码的可读性。因此,今天就给大家推荐一款Java开发神器——Lombok,让代码更简单易读。 什么是Lombok Lombok是一款Java开发插件,可以通过它定义的注解来精简冗长和繁琐的代码,...

付凯 266

java lombok 使用_Java开发神器Lombok的使用与原理(转)

在面向对象编程中必不可少需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此。相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而需要重复写Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等。那么是否一款插件或工具能够替大家完成这些繁琐的操作呢?本文将向大家介绍一款在Eclip...

weixin_35029527的博客 346

Java开发神器lombok

背景 我们在Java的开发过程中,通常都会定义大量的JavaBean,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,当要对某个属性进行改变时,比如命名、类型等,都需要重新去生成上面提到的这些方法。虽然这些IDE会帮我们做,但还是很麻烦,代码很臃肿,那有没有一种方式能够避免这种重复的操作那?答案是有的,现在给就大家安利...

dichongkan4323的博客 609

Lombok:Java开发者的代码简化神器【后端 17】

Lombok是一个Java库,它通过注解在编译时期自动生成模板方法、构造函数、getter/setter等,从而减少冗余的代码,让开发者能够专注于业务逻辑的实现。Lombok的核心理念是“通过简单的注解,让代码更加简洁易懂”。由于Lombok生成的代码是在编译时插入的,IDE在编写代码时可能无法识别这些方法,导致IDE报错或提示方法未定义。安装Lombok插件后,IDE将能够识别这些由Lombok注解生成的代码,从而避免此类问题。

delepaste的博客 1394
上一篇: 【Dubbo】深入理解Apache Dubbo(二):开发第一个Dubbo应用程序
下一篇: 【操作系统】进程/线程模型
少侠露飞
博客等级 码龄9年 214粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值