本章目录
前言
我们在开发中经常需要花很多时间给JavaBean的属性写getter/setter方法和构造器等,这是一个漫长而又繁琐的过程。而Lombok应运而生,它可以用简单的注解形式来简化java代码,比如说可以使用几个注解就不需要编写getter/setter方法了。这篇文章将讲述lombok的使用和一些自己的总结。
一、Lombok简介
Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lombok,我们可以节省构建诸如 hashCode() 和 equals() 这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。
Lombo之所以能自动生成代码,最终够达到在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法的效果,是因为它在注解解析上做了“手脚”。具体是如何实现的,这个就需要阅读源码了。博主还没有阅读过,这里只是简单的讲下它的使用说明,以及自己的一些经验总结。
GitHub链接:https://github.com/rzwitserloot/lombok
二、Lombok使用
1、加入maven依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
2、常用注解介绍
@Date
@Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如果是final属性,则不会为该属性生成setter方法。
@Getter/@Setter
使用@Getter/@Setter注解,此注解在属性上,可以为相应的属性自动生成Getter/Setter方法。
@NonNull
该注解用在属性或构造器上,Lombok会生成一个非空的声明,可用于校验参数,能帮助避免空指针。
@EqualsAndHashCode
自动生成 equals(Object other) 和 hashcode() 方法。说到这个方法,就要说说equals和hashcode的关系了。
由于equals比较的太全面比较复杂,所以每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性。
@NoArgsConstructor, @RequiredArgsConstructor 和 @AllArgsConstructor
分别对应无参构造器、部分参数构造器、全参构造器。Lombok没法实现多种参数构造器的重载。
@Slf4j
注解在类,生成log变量,严格意义来说是常量,要打日志就可以直接打,不用再手动 new log 静态常量了。
三、总结
优点:
- 让代码变得简洁
- 通过注解的形式消除 Java 的冗长且编译时自动生成,提高了一定的开发效率。
缺点:
- 不支持多种参数构造器的重载
- 降低了源代码的可读性和完整性
- 需要强制下载Lombok插件
对于我来说Lombok是一个好用的工具,在一般的项目开发中都可以用得上,但是在逻辑业务比较复杂的情况下,及并不推荐了,我们结合具体业务场景和项目实际情况。比如说,我现在有个十分复杂的业务,在getter/setter加一点点业务代码,就能极大的简化业务场景的代码,那我为什么还要使用Lombok呢。
硬币都有正反两面,Lombok也有它优点和缺点,结合具体业务场景和项目实际情况,灵活运用才是王道。