【工具篇】Lombok 介绍及使用(详细教程)

Lombok 介绍及使用


一,Lombok介绍

在 Java 开发中,常常需要编写大量的getter、setter方法、equals和hashCode方法、构造函数等重复且繁琐的代码。

为了减少 Java 代码中的冗余和样板代码,提高代码的可读性和开发效率,就有了Lombok的出现。

Lombok是一个 Java 库,它通过使用注解来简化 Java 代码的编写。它提供了一系列的注解,用于自动生成常见的代码,如gettersetter方法、构造函数、equalshashCode方法等,以减少开发者的重复劳动。

使用Lombok,开发者只需在 Java 类上添加相应的注解,而不需要手动编写相应的代码。在编译过程中,Lombok会根据这些注解自动生成对应的代码,减少代码中的冗余和样板代码以及简化代码的编写过程。

使用Lombok可以提高代码的可读性、简洁性和可维护性,让开发者能够更专注于业务逻辑的实现。


二,Lombok下载

要想使用Lombok,需要在项目的构建工具中引入Lombok的依赖,并在开发环境中安装对应的插件,以支持Lombok的注解和自动生成的代码的显示和编辑。

1,Lombok插件安装

按照图中标记依次操作就可以进行Lombok插件的安装,安装好后点击启动,重新打开IDEA即可。

2,Lombok依赖引入

Lombok插件安装好后,就可以在项目的pom.xml文件中添加Lombok依赖,Lombok依赖信息如下:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

完成Lombok插件安装和Lombok依赖引入操作后,就可以使用Lombok了。


三,Lombok原理

Lombok基本实现原理

Lombok的基本实现原理可以概括为以下几个步骤:

  1. 注解扫描:Lombok的注解处理器会扫描Java源代码中的注解,并找到使用了Lombok注解的类、字段和方法。
  2. AST操作:Lombok注解处理器会对注解所标注的类进行抽象语法树(AST)的解析和操作,以识别和处理这些注解。
  3. 注解解析:注解处理器解析找到的注解,确定需要生成的代码类型和内容。
  4. 代码生成:基于注解的定义和规则,Lombok注解处理器生成相应的代码片段,如getter和setter方法、构造函数等。
  5. 代码注入:生成的代码片段被插入到编译结果中的相应位置,与手动编写的代码合并在一起。
  6. 最终编译:编译器将生成的代码和手动编写的代码一起编译为最终的字节码文件。

总结归纳:Lombok利用 Java 编译器的注解处理器技术,在编译期间扫描和解析使用了Lombok注解的源代码,然后会对注解所标注的类进行抽象语法树(AST)的解析和操作,以识别和处理这些注解。然后再根据注解的定义和规则,生成相应的代码片段,并将其插入到编译器的内部结构中。最后,生成的代码片段与手动编写的代码一起经过编译,生成可执行的字节码文件。


普通程序运行原理流程:

Lombok运行原理流程:


四,Lombok使用

常见的Lombok基本注解

注解 注解作用
@Getter 自动生成字段的getter方法
@Setter 自动生成字段的setter方法
@ToString 自动生成toString方法
@EqualsAndHashCode 自动生成equals和hashCode方法
@NoArgsConstructor 自动生成无参构造函数
@AllArgsConstructor 自动生成包含所有字段的构造函数

常见的Lombok组合注解

注解 注解作用
@Data 组合了@Getter、@Setter、@ToString、@EqualsAndHashCode等注解的功能
@Value 组合了@Getter、@ToString、@EqualsAndHashCode等注解的功能

思考:@Data注解和@Value注解有哪些区别?

解答:@Data生成的类是可变的,具有可读写的setter方法,@Value生成的类是不可变的,字段是final的,没有生成setter方法。

Lombok日志注解

注解 注解作用
@Slf4j 自动生成一个名为log的日志记录器

Lombok其他注解

注解 注解作用
@Builder 自动生成Builder模式的构造器方法
@NonNull 自动生成非空检查
@Delegate 自动生成委托方法
@Cleanup 自动释放资源

日志注解的使用

在上篇博客讲解日志打印的方式时,不难发现每次都使用LoggerFactoy.getLogger(lxxx.class)方法获取到 log对象的过程比较繁琐,而且要确保每个类对应的包都导入成功,那有什么方法来解决这个问题吗?

答案肯定是有的,使用Lombok中的日志注解@SIf4j就可以很好地解决上述操作过程的繁琐问题。

在添加 lombok 框架依赖后,使用 @Slf4j 注解就可在程序中使用log对象输入日志内容,并且只能使用 log 对象才能输出。

那为啥只能使用 log 对象才能输出呢? 这是因为log对象是lombok提供的对象。

使用Lombok的日志注解,并经过Lombok的一系列处理操作后,@Slf4J 注解会自动转换成对应的log对象创建代码。

与之对应的.java文件和编译生成的.class文件对比图:


结语

这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!


相关推荐
微露清风38 分钟前
系统性学习C++-第五讲-内存管理
java·c++·学习
计算机毕业设计木哥42 分钟前
计算机毕业设计选题推荐:基于SpringBoot和Vue的快递物流仓库管理系统【源码+文档+调试】
java·vue.js·spring boot·后端·课程设计
235161 小时前
【LeetCode】146. LRU 缓存
java·后端·算法·leetcode·链表·缓存·职场和发展
聪明的笨猪猪1 小时前
Java Redis “运维”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
FIavor.1 小时前
怎么办这是Apifox里执行http://localhost:9002/goods/getByUserName?name=“张三“为什么我改了还是500?
java·网络·网络协议·http
编程饭碗1 小时前
【Java集合】
java
岁岁岁平安1 小时前
Java的双重检查锁机制(DCL)与懒加载的单例模式
java·单例模式·synchronized·
Jabes.yang1 小时前
Java面试场景:从Spring Boot到Kubernetes的技术问答
java· 面试· spring boot· 微服务· kubernetes· 技术栈· redis
小咕聊编程1 小时前
【含文档+PPT+源码】基于SpringBoot+Gpt个人健康管理系统
java·gpt·tomcat·毕业设计·hibernate
阿无,2 小时前
Java设计模式之工厂模式
java·开发语言·设计模式