Lombok

Lombok是一款强大的Java库,通过注解简化代码生成,如构造器、getter/setter等,提升开发效率,减少冗余代码。本文详细介绍Lombok的原理、使用方法及常见注解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初识Lombok

说到Lombok不得不提一个非常有趣的Java背景故事······

据说当年Java的前一个名称Oak在注册时候已经被另一家公司使用了,所以Oak不得不面临改名的命运,于是就召开了改名大会,员工们各抒己见,最后从无数逗比的名字中筛选出了三个名字:Silk, DNA, Java;最终从三个名称中诞生了Java

java的名字的来源

java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。java语言中的许多库类名称,多与咖啡有关,如javabeans(咖啡豆)、netbeans(网络豆)以及objectbeans (对象豆)等等。sun和java的标识也正是一杯正冒着热气的咖啡。

那上面这些乱七八糟的和Lombok又有什么关系呢?

Lombok 是印度尼西亚西努沙登加拉(Nusa Tenggara Barat)省岛屿龙目岛的别称,而Lombok岛临近Java岛······

言归正传:

Lombok官方介绍如下:

Project Lombok makes java a spicier language by adding ‘handlers’ that know how to build and compile simple, boilerplate-free, not-quite-java code.

大致意思是Lombok通过增加一些“处理程序”,可以让java变得简洁、快速。

Lombok简介及优点

Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。

优点

  • 提高编码效率;
  • 使代码更简洁;
  • 消除冗长代码;
  • 避免修改字段名字时忘记修改方法名;
  • 注意:IDE上必须要支持Lombok,否则会报错;

Lombok原理

Lombok支持JSR 269 Pluggable Annotation Processing API,Javac从Java6开始支持“JSR 269 API”规范,只要程序实现了该API,就能在Javac运行的时候得到调用;

Annotation(标记)是java 5里面引进来的,用于在源代码里面附加元信息(meta-information).Java 6则进一步加强了标记的处理功能,即JSR269。在JSR 269之前,annotation在运行期处理,使用也只能通过反射获取;而JSR 269用Annotation Processor在编译期间而不是运行期间处理Annotation。这样我们可以手动指定annotation在编译期解析;

@Retention定义了该 Annotation 被保留的时间长短

  • SOURCE:在源文件中有效(即源文件保留)编译成class文件将舍弃该注解。
  • CLASS:在class文件中有效(即class保留) 编译成dex文件将舍弃该注解。
  • RUNTIME:在运行时有效(即运行时保留) 运行时可见。

Lombok通过编译期间解析annotation,根据注解修改字节码文件,实现原有代码的功能拓展
在这里插入图片描述

Lombok使用方法

Maven

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven</artifactId>
    <version></version>
</dependency>

插件

在IDEA或者Eclipse中安装Lombok插件,否则lde无法解析Lombok注解

Lombok常用注解

@Data 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter :注解在属性上;为属性提供 setting 方法
@Getter :注解在属性上;为属性提供 getting 方法
@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
@NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
@Cleanup : 可以关闭流
@Builder : 被注解的类加个构造者模式
@Synchronized : 加个同步锁
@SneakyThrows : 等同于try/catch 捕获异常
@NonNull : 如果给参数加个这个注解 参数为null会抛出空指针异常
@Value : 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。
@toString:注解在类上;为类提供toString方法(可以添加排除和依赖);

具体案例请点击下面官方文档链接,官方文档案例更准确、经典,这里不再重复展示
官方文档 https://projectlombok.org/features/index.html

Lombok使用注意点

  • 使用Lombok能够省去手动创建setter和getter方法,但是也降低了源代码文件的可读性和完整性,降低了源代码阅读的舒适度;
  • 选择合适的类,一般的原则是POJO适合使用Lombok;
  • 使用@Slf4j还是@Log4j看项目使用的日志框架;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值