开发工具 - Lombok一文入门到入土~

零、前言

Lombok开发利器,非常简单的一个工具。此片博客参看:

  • 官网:https://projectlombok.org/
  • B站编程不良人:https://www.bilibili.com/video/BV1gg4y1v7Mi

使用Lombok环境要求:JDK1.8+,MAVEN,IDEA,Internet,… 。

在IDEA中安装使用步骤:

  1. 引入pom依赖
  2. 安装Lombok插件(需要重启)
  3. 在对应类上加上注解


一、Lombok入门

1.Lombok介绍

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

简而言之就是Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码(getter/setter/hashcode/equals等)。仅五个字符(@Data)就可以替换数百行代码从而产生干净。


2.项目中使用Lombok

2.1 引入依赖

直接在官网获取依赖,或者去maven远程仓库查看依赖(我获取的是Lombok官网的最新版本)

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope> 
</dependency>

2.2 安装Lombok插件

在IDEA中默认是不支持Lombok的,即使引入了依赖也不支持。为了使得IDEA能正常使用Lombok,就必须的安装一个Lombok的插件(安装之后重启生效)

在这里插入图片描述

之后,需要设置Annotation Processors(开启表示在编译时注解生效,不开启不影响使用)

在这里插入图片描述


2.3 使用提供的注解

在新建Entity类之后,在类上加上@Data注解

@Data // lombok插件 简化实体类开发
public class User {
    private String username;
    private String password;
}

就实体类的gette,setter,equals,hashcode,tostring等一系列方法。可以开启Structure查看类结构:

在这里插入图片描述

之后就可正常的调用。非常的简单。


二、Lombok分析

1.Lombok注解

1.1 常用的Lombok注解

@Data:作用在类上,生成GET SET 等一系列相关方法。具体用法参考前面的使用。

@Getter/@Setter/@ToString:作用在类上,只是生成get/set/toString方法。

@AllArgsConstructor/@NoArgsConstructor:作用在类上,提供全参和无参构造方法,要生成特定参数的构造方法需要手写。

@Accessors:作用在类上,设置chain属性chain = true表示开启链式操作,比如链式使用set方法

@Data
@Accessors(chain = true)
public class User {
    private String username;
    private String password;
}

之后支持链式调用

public static void main(String[] args) {
    User user = new User();
    user.setUsername("张三").setPassword("123"); // 链式操作
}

@Slf4j:作用在类上(需要使用Logger的类),快速定义日志定义,直接调用log即可。相当于在这个类中声明了一个日志对象,即等价于如下操作

private Logger log =  LoggerFactory.getLogger(this.getClass());

示例代码(这里还扩展了Logger的info方法,详细查看api):

@RestController
@Slf4j
public class HelloController {
    @GetMapping("/user")
    public User getUser(String name, int age){
    	// log 不用创建 他就是Logger类的实例化
        log.info("姓名:[{}],年龄:[{}]",name,age); //输出 姓名:[张三],年龄:[18]
        return new User();
    }
}

1.2 注解@Data

这里分析一下@Data注解,其他的注解分析方式都差不多。

首先是查看 官方介绍 ,找到@Data处

在这里插入图片描述

通过翻译我们能够查看一下官方对@Data的描述,简而言之就是 使用@Data注解在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor这些注解,对于POJO类十分有用。

之后,我们查看一下**@Data**注解源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
    String staticConstructor() default "";
}

说明此注解是在SOURCE阶段生效,即编译阶段生效,也正是由于这个因素,会带来一些开发人员反感的点。

Lombok其他的注解都能也是多查看一下 官方描述文档,照葫芦画瓢即可 ^_^ ~


2.Lombok注解修饰后实体类执行情况

这里涉及到的知识点大部分是关于Java注解的和运行时段的

经过上面的注解源码的分析,可知道Lombok生效是在compiler编译阶段,也就是说在我们编译好之后,实体类诸多方法都已经存在编译好的代码里了(这里我们可以查看)。

在这里插入图片描述

明确这一点之后,Java代码的执行流程就回到我们非常熟悉的流程了。

在这里插入图片描述

Lombok生效的时间和SpringBoot中的注解不一样,前者是在compiler编译时生效,后者是在RUNTIME运行时生效。


3. Lombok的缺点

我们是使用@Data注解大大减少了代码量,使代码非常简洁。这也是很多开发者热衷于使用Lombok的主要原因。即使这样,还是会有让人诟病的地方:

3.1 强制安装IDE插件

Lombok的使用要求开发者一定要在IDE中安装对应的插件。

即项目组中有一个人使用了Lombok,那么其他人就必须也要安装IDE插件;定义一个jar包中使用了Lombok,所有依赖这个jar包的所有应用都必须安装插件。

3.2 代码可读性、可调试性低

Lombok自动生成的代码都是在编译时期生成的代码,所以在开发过程中,很多代码是缺失的。

由于代码的缺失,可读性减低,代码调试带来一定的问题。比如,某个类的属性的get方法被哪些类引用,不能简单获取到。

3.3 生成的代码不一定可靠

Lombok很方便,但对各种注解的底层不了解的话,很容易产生各种奇奇怪怪的问题。就比如实体类被@Data修饰后,会自动生成equals()方法,但是如果只使用了@Data,而不使用 @EqualsAndHashCode(callSuper=true),会默认是@EqualsAndHashCode(callSuper=false),这时候生成的equals()方法只会比较子类的属性,不会考虑从父类继承的属性,无论父类属性访问权限是否开放。

3.4 破坏封装性

众所周知,Java的三大特性包括封装性、继承性和多态性。使用Lombok,一个类中的所有参数都自动提供了设置和读取方法,这可能会破坏了代码的封装性。比如当一个类中的两个参数变化必须是同时的,而Lombok提供的public的getter/setter方法是能随意修改的,这并不能达到我们所预期的效果。


三、结语

通过以上分析,了解到了Lombok的优点和缺点,那么到底要不要在项目中使用它?

这应该根据项目的需求而定,能想到它的优点的同时,还能考虑到它给代码程序带来的麻烦。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值