lombok介绍及应用

Lombok是一个用于简化Java开发的工具,通过注解自动为属性生成getter/setter、构造器、equals、hashcode、toString等方法,减少冗余代码,提高开发效率。本文介绍了Lombok的使用、注解详解、工作原理以及优缺点。

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

1、介绍

Lombok官网:https://projectlombok.org

lombok其实就是帮助我们编写getter或者equals方法的一个“工具”。

Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误

Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setterequalshashcodetoString方法。在源码中没有gettersetter方法,但是在编译生成的字节码文件中有gettersetter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。

2、使用LomBok的两点主要原因

  1.  简化冗余的JavaBean代码;
  2.  提高JavaBean中方法的执行效率

Lombok也提供了对打印日志的处理。
       在使用Lombok以后就会大大减少项目中的代码量,
       同时由于Lombok有自动修改的功能,也提高了项目中代码的执行效率。


没使用lombok的Javabean

使用了lombok的javabean

3、导入

(1)导入依赖

2Intellij IDEA 安装 lombok 插件

Intelij IDEA 支持 lombok 插件 , 如你的idea 不支持, 请更新 较高版本 2017 及以上, 其他Ide类同;

添加进去以后点击import change,等待Ideajar包下载完就可以在项目中使用了。

使用详解
       想要使用Lombok就需要删除在项目中(JavaBean)存在的已经生成的getter方法setter方法以及equalshash方法

4、Lombok注解详解

Lombok主要常用的注解有:@Data,@getter,@setter,@NoArgsConstructor,@AllArgsConstructor,@ToString,@EqualsAndHashCode,@Slf4j,@Log4j

@Slf4j:在需要打印日志的类中使用,当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;

@Data注解:在JavaBean或类JavaBean中使用,这个注解包含范围最广,它包含gettersetterNoArgsConstructortoString 注解,即当使用当前注解时,会自动生成包含的所有方法

@getter注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的getter方法

@setter注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的setter方法

@NoArgsConstructor注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的无参构造方法

@AllArgsConstructor注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的有参构造方法

@EqualsAndHashCode注解:在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的equals方法和hashCode方法

@Log4j:在需要打印日志的类中使用,当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可

@ToString注解:在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的toStirng方法;


在使用以上注解需要处理参数时,处理方法如下(以@ToString注解为例,其他注解同@ToString注解):

@ToString(exclude=“column”)

意义:排除column列所对应的元素,即在生成toString方法时不包含column参数;

@ToString(exclude={“column1”,“column2”})

意义:排除多个column列所对应的元素,其中间用英文状态下的逗号进行分割,即在生成toString方法时不包含多个column参数;

@ToString(of=“column”)

意义:只生成包含column列所对应的元素的参数的toString方法,即在生成toString方法时只包含column参数;

@ToString(of={“column1”,“column2”})

意义:只生成包含多个column列所对应的元素的参数的toString方法,其中间用英文状态下的逗号进行分割,即在生成toString方法时只包含多个column参数;

5、Lombok工作原理分析

Lombok使用的过程中,只需要添加相应的注解,无需再为此写任何代码。自动生成的代码到底是如何产生的呢?

——其核心之处就是对于注解的解析上。JDK5引入了注解的同时,也提供了两种解析方式

(1)运行时解析

运行时能够解析的注解,必须将@Retention设置为RUNTIME,这样就可以通过反射拿到该注解。java.lang,reflect反射包中提供了一个接口AnnotatedElement,该接口定义了获取注解信息的几个方法,ClassConstructorFieldMethodPackage等都实现了该接口,对反射熟悉的朋友应该都会很熟悉这种解析方式

(2)编译时解析

编译时解析有两种机制:

——Annotation Processing Tool

——Pluggable Annotation Processing API

Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下:

1javac对源代码进行分析,生成了一棵抽象语法树(AST

2、运行过程中调用实现了“JSR 269 API”Lombok程序

3、此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加gettersetter方法定义的相应树节点

4javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)

 

6、Lombok的优缺点

优点:

能通过注解的形式自动生成构造器、getter/setterequalshashcodetoString等方法,提高了一定的开发效率

让代码变得简洁,不用过多的去关注相应的方法

属性做修改时,也简化了维护为这些属性所生成的getter/setter方法

 

缺点:

不支持多种参数构造器的重载

虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值