Lombok 的安装与使用
文章目录
- 一、什么是 Lombok
- 1.1 Lombok 的概念
- 1.2 为什么使用 Lombok
- 1.3 Lombok 的相关注解
- 二、Lombok 的安装
- 2.1 引入依赖
- 2.2 安装插件
- 三、Lombok 的使用案例
- 四、Lombok 的原理
一、什么是 Lombok
1.1 Lombok 的概念
Lombok(“Project Lombok”)是一款针对 Java 开发的实用工具库。它通过使用注解自动生成 Java 类的通用代码,从而简化了 Java 代码的编写过程。Lombok 的目标是减少样板代码(boilerplate code),提高代码的简洁性和可读性。
1.2 为什么使用 Lombok
在传统的 Java 开发中,常常需要为 Java 类编写大量的 getter 和 setter 方法、equals 和 hashCode方法、toString方法等通用的代码,这些代码在大多数情况下都是重复且无趣的。而使用 Lombok,可以通过简单的注解在Java类上,自动生成这些通用代码,从而避免了重复劳动。
1.3 Lombok 的相关注解
下面是常用的 Lombok 注解:
| 注解 | 说明 |
|---|---|
@Data | 自动生成 getter、setter、equals、hashCode 和 toString 方法。 |
@Getter | 自动生成 getter 方法。 |
@Setter | 自动生成 setter 方法。 |
@ToString | 自动生成 toString 方法。 |
@EqualsAndHashCode | 自动生成 equals 和 hashCode 方法。 |
@NoArgsConstructor | 自动生成无参构造函数。 |
@RequiredArgsConstructor | 自动生成带有 @NonNull 注解的成员变量的构造函数。 |
@AllArgsConstructor | 自动生成包含所有成员变量的构造函数。 |
@Builder | 自动生成建造者模式的构建方法。 |
@Slf4j | 自动生成 log 日志对象。 |
@Value | 类似于 @Data,但生成的类是不可变的(immutable)。 |
@Cleanup | 自动生成资源(如流)的关闭代码。 |
@SneakyThrows | 自动生成异常抛出代码,用于把受检异常转换为非受检异常。 |
@NonNull | 为成员变量标记非空约束,自动生成空值检查代码。 |
@Getter(AccessLevel.NONE) | 取消生成 getter 方法。 |
@Setter(AccessLevel.NONE) | 取消生成 setter 方法。 |
@NoArgsConstructor(access = AccessLevel.PRIVATE) | 生成私有的无参构造函数。 |
以上是常用的一些 Lombok 注解及其说明,通过使用这些注解,可以简化 Java 类的编写,减少样板代码,提高代码的简洁性和可读性。需要根据实际情况选择合适的注解,以便在项目中获得更好的开发体验。
二、Lombok 的安装
2.1 引入依赖
可以通过 Lombok的官网:https://projectlombok.org/ 获取依赖:

如果是 Maven 项目,选择Install中的Build tools,点击maven 进行复制,然后粘贴到 pom.xml 中的 <dependencies> 里面即可;当然,在创建 Spring Boot 项目时,也可以直接在创建的时候选择 Lombok 依赖。
2.2 安装插件
在 IDEA 中,如果想要在使用时提示相应的注解,还需要安装 Lombok Builder Helper 插件:

三、Lombok 的使用案例
创建了一个使用 Lombok 注解的User类:
@Component
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {private Integer id;private String name;private Integer age;
}
通过 TestController类获取 User 对象,并对其执行操作:
@Controller
@ResponseBody
public class TestController {@Autowiredprivate User user;@RequestMapping("/test")public void test(){System.out.println(user);System.out.println("===================");user.setId(123);user.setName("张三");user.setAge(18);System.out.println("===================");System.out.println(user);}
}
执行结果:

四、Lombok 的原理
Lombok 的原理主要依赖于 Java 的注解处理器(Annotation Processor)。在编译 Java 源代码的过程中,注解处理器会读取源代码中的Lombok 注解,并根据注解的定义自动生成相应的 Java 代码,然后将这些生成的代码插入到编译结果中,最终生成编译后的 class 文件。
具体来说,Lombok的原理如下:
-
注解的识别:在编译 Java 源代码的过程中,注解处理器会扫描源代码中的 Lombok 注解,如
@Getter、@Setter、@NoArgsConstructor等。 -
解析注解:一旦发现 Lombok 注解,注解处理器会解析该注解的定义,并确定生成代码的内容,例如生成
getter和setter方法,构造函数等。 -
生成代码:根据注解的定义,注解处理器会生成对应的 Java 代码片段,比如生成
getter方法的代码,setter方法的代码,构造函数的代码等。 -
插入生成的代码:注解处理器将生成的代码插入到源代码中相应的位置。
-
编译:在生成了包含 Lombok 生成的代码的新的 Java 源代码之后,编译器会继续将新的源代码编译成字节码文件(.class文件)。
-
最终结果:最终生成的class文件包含了Lombok生成的代码,这样在运行时,就能够使用Lombok自动生成的方法和构造函数等功能。
例如,在编译 User 类前的代码如下:

编译后查看 target 目录下 User 对应的 .class 文件:

此时可以发现自动生成了各种 setter 、getter 和构造方法等。并且与 Lombok 相关的注解也消失了。
相关文章:
Lombok 的安装与使用
文章目录 一、什么是 Lombok1.1 Lombok 的概念1.2 为什么使用 Lombok1.3 Lombok 的相关注解 二、Lombok 的安装2.1 引入依赖2.2 安装插件 三、Lombok 的使用案例四、Lombok 的原理 一、什么是 Lombok 1.1 Lombok 的概念 Lombok(“Project Lombok”)是一…...
springBean生命周期解析
本文基于Spring5.3.7 参考: kykangyuky Spring中bean的生命周期 阿斌Java之路 SpringBean的生命周期, 杨开振 JavaEE互联网轻量级框架整合开发 黑马程序员 JavaEE企业级应用开发教程 马士兵 Spring源码讲解 一. SpringBean生命周期流程图 二. 示例代码 …...
人工智能轨道交通行业周刊-第54期(2023.7.31-8.6)
本期关键词:BIM智能运维、铁水联运、编组站美容、鸿蒙4.0、LK-99完全悬浮 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道世界…...
Docker Compose 使用方法
目录 前言 安装 Docker Compose Ubuntu 安装与更新 Red Hat 安装与更新 验证是否安装 Docker Compose 创建 docker-compose.yml 文件 创建一个MySQL 与 tomcat 示例 使用Docker Compose启动服务 前言 Docker Compose 是一个工具,旨在帮助定义和 共享多容器…...
HTML 初
前言 HTML的基本骨架 HTML基本骨架是构建网页的最基本的结果。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…...
IPv6地址分类,EUI-64转换规则
1、可聚合的单全球单播地址Global Unique Address: Aggregate global unicast address,前3位是001,即2000::/3,目前IANA已经将一部分可聚合全球单播进行了专门使用,如:2001::/16用于IPV6互联网,…...
Nginx安装部署
什么是Nginx? Nginx(发音同engine x)是一款由俄罗斯程序员Igor Sysoev所开发轻量级的网页服务器、反向代 理服务器以及电子邮件(IMAP/POP3)代理服务器。 Nginx 因具有高并发(特別是静态资源)、 占用系统资…...
物联网|按键实验---学习I/O的输入及中断的编程|读取I/O的输入信号|中断的编程方法|轮询实现按键捕获实验-学习笔记(13)
文章目录 实验目的了解擒键的工作原理及电原理图 STM32F407中如何读取I/O的输入信号STM32F407对中断的编程方法通过轮询实现按键捕获实验如何利用已有内工程创建新工程通过轮询实现按键捕获代码实现及分析1 代码的流程分析2 代码的实现 Tips:下载错误的解决 实验目的 了解擒键…...
Hadoop-HDFS的Namenode及Datanode(参考Hadoop官网)
HDFS有什么特点,被设计做什么 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。有一下几个特点: HDFS是一个高度容错性的系统,具有高容错、高可靠性、高扩展性的特点,适合部…...
C:通过alarm发送信号
可以通过alarm定时发送SIGALRM信号: #include <unistd.h> unsigned int alarm(unsigned int seconds); alarm()函数用来在seconds秒之后安排发送一个SIGALRM信号,如果seconds为0,将取消所有已设置的闹钟请求。alarm()函数的返回值是以前…...
如何将 dubbo filter 拦截器原理运用到日志拦截器中?
业务背景 我们希望可以在使用日志拦截器时,定义属于自己的拦截器方法。 实现的方式有很多种,我们分别来看一下。 拓展阅读 java 注解结合 spring aop 实现自动输出日志 java 注解结合 spring aop 实现日志traceId唯一标识 java 注解结合 spring ao…...
【java】【maven】【基础】MAVEN安装配置介绍
目录 1 下载 2 安装-windows为例 3 配置环境变量 3.1 JAVA_HOME 3.2 MAVEN_HOME 3.3 PATH 3.4 验证 4 MAVEN基础概念 4.1 仓库概念 4.2 坐标概念 4.2.1 打开网址 4.2.2 输入搜索内容junit 4.2.3 找到对应API名称点击 4.2.4 点击对应版本 4.2.5 复制MAVEN坐标 4.3 配置…...
【C语言进阶】指针的高级应用(下)
文章目录 一、指针数组与数组指针1.1 指针数组与数组指针的表达式 二、函数指针2.1 函数指针的书写方式 三、二重指针与一重指针3.1 二重指针的本质3.2 二重指针的用法3.3 二重指针与数组指针 总结 一、指针数组与数组指针 (1)指针数组的实质是一个数组,这个数组中存…...
【uniapp APP隐藏顶部的电量,无线,时间状态栏与导航栏】
uniapp APP隐藏顶部的电量,无线,时间状态栏 如下代码配置(在一个页面设置这个段代码,所有页面都会消失) onShow() {// #ifdef APP-PLUS// 隐藏顶部电池,时间等信息 plus.navigator.setFullscreen(true);//隐藏虚拟按…...
微信小程序前后页面传值
微信小程序前后页面传值 从前一个页面跳转到下一个页面,如何传递参数?从后一个页面返回前一个页面,如何回调参数? 向后传值 从前一个页面跳转到下一个页面并传值。 前页面:在跳转链接中添加参数并传递 wx.navigat…...
没有jodatime,rust里怎么比较两个日期(时间)的大小呢?
关注我,学习Rust不迷路!! 在 Rust 中,比较两个日期的大小有多种方法。以下是列举的四种常见方法: 1. 使用 PartialOrd trait: use chrono::prelude::*;fn main() {let date1 NaiveDate::from_ymd(2022,…...
【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板18
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…...
C语言假期作业 DAY 14
一、选择题 1、有以下函数,该函数的功能是( ) int fun(char *s) {char *t s;while(*t);return(t-s); } A: 比较两个字符的大小 B: 计算s所指字符串占用内存字节的个数 C: 计算s所指字符串的长度 D: 将s所指字符串复制到字符串t中 答案解析 …...
Maven-生命周期及命令
关于本文 ✍写作原因 之前在学校学习的时候,编写代码使用的项目都是单体架构,导入开源框架依赖时只需要在pom.xml里面添加依赖,点一下reload按钮即可解决大部分需求;但是在公司使用了dubbo微服务架构之后发现只知道使用reload不足…...
常温超导:AI在研发中的潜力
目录 引言:1. 常温超导的挑战:2. AI在材料研究中的作用:3. AI在理论模型中的作用:4. AI与实验室合作的潜力:结论: 引言: 常温超导一直被认为是科学界的“圣杯”,可以在室温条件下实…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
