关于pojo构建偷懒神器Lombok

前言

懒人是推动社会进步的原动力

很多技术都是为了偷懒而生的。。。


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类中的大量样板代码,替换代码从而产生干净,简洁且易于维护的Java类

关于Lombok,一切以官网为准:Lombok官网


繁琐的实体类

编写pojo实体类都能感觉到有多么繁琐
简单的一个User实体类,只有3个属性id,name,password

public class User {
    private int id;
    private String name;
    private String password;
    

至少需要无参构造、有参构造、setter、getter、toString
甚至涉及到比较还需要重写equals方法

 public User() {
    }

    public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

Lombok使用

为懒人而生的Lombok,通过注解省去我们设置的上述方法

使用步骤:

  1. 安装插件
    在IDEA里:File -》Settings -》Plugins -》搜索Lombok插件 -》install
    在这里插入图片描述
  2. 导包
    如果是Maven添加依赖, 不是Maven导包即可
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    <scope>provided</scope>
</dependency>

在这里插入图片描述


注解

有哪些注解呢?
可以在插件界面看到,Lombok支持挺多注解

在这里插入图片描述

最常用也就这几个:

  1. @Data(实体类默认注解)
    添加在类上

在这里插入图片描述

注解@Data后,自动完成了无参构造、getter、setter、equals、hashCode、toString
(太强了。。。)

  1. @AllArgsConstructor有参构造
    添加在类上,从注解名也看得出是所有的参数的构造器

在这里插入图片描述

但是把无参构造去掉了,而且是所有的参数的构造器,不能选择

  1. @NoArgsConstructor
    添加在类上,如果需要无参构造,可以加上这个注解

在这里插入图片描述

  1. @Getter、@Setter
    可以添加在类上或者字段上

在这里插入图片描述

  1. 作用与方法、参数
    NonNull设置在变量或者参数上,可以避免空指针
    Synchronized可以替换synchronize关键字或lock锁
    在这里插入图片描述

还有其他注解,大致都是这样,一切都是为了偷懒


Lombok实现原理

Lombok是在编译生成的字节码文件中会帮我们生成这些方法需要的方法

具体实现是:

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

  2. javac编译过程中调用实现了JSR 269的Lombok程序

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

  4. javac使用修改后的抽象语法树(AST)生成字节码文件


要不要使用Lombok?

利弊共存

Lombok既是一个IDE插件,也是一个项目要依赖的jar包

Lombok依赖jar包的原因是因为编译时要用它的注解
Lombok是插件的原因是他要在编译器编译时通过操作AST(抽象语法树)改变字节码生成(按照上面的原理)

所以Lombok可以改变java语法,是侵入式的工具

用时一时爽,报错火葬场

在知乎上看到的:
在这里插入图片描述

权衡利弊

很明显,Lombok有一定的优点:

  1. 简化繁琐的重复操作
  2. 简洁代码

也有缺点:

  1. 会改变Java语法,侵入式
  2. 和别人合作以前写代码就需要都安装Lombok,比较烦
  3. 代码对没接触过的太不友好了(没接触过Lombok看这代码根本看不懂)

总结,自己写代码,或者统一好了一起使用,用Lombok是真的方便
还有,Lombok应该就省略setter、getter等重复工作就好,别整花里胡哨的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值