IntelliJ IDEA Java高率开发插件Lombok

IntelliJ IDEA Java高率开发插件Lombok

0.前言

在SpringBoot应用中集成Java效率工具Lombok插件,以注释的形式简化Java简单对象(POJO)的代码

Lombok的Github地址:
Java高率开发插件Lombok—Github地址

1.Lombok插件安装

File->Settings->Plugins->MarketPalce->搜索Lombok并安装

在这里插入图片描述

下载后会有提示重启IDEA,安装完成了。

2.Maven中添加依赖Lombok依赖

由于我是用的Maven管理的依赖,写文章时在Maven存储库网站—Lombok中最新版为1.18.10,所以在pom.xml添加如下依赖:

 <dependencies>
 ...
        <!-- Java高率开发插件Lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
...
    </dependencies>

3.使用Lombok中的常用注释

更多使用可查看官方文档(英文):

官网Lombok-Javadoc

官方Lombok-API

常用注解:

@Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。

@Getter :使用方法同上,区别在于生成的是getter方法。

@ToString :注解在类,添加toString方法。

@EqualsAndHashCode: 注解在类,生成hashCode和equals方法。

@NoArgsConstructor: 注解在类,生成无参的构造方法。

@RequiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。

@AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法。

@Data: 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。

@Slf4j: 注解在类,生成log变量,严格意义来说是常量。

4.查看生成的代码

import lombok.Data;
@Data
public class CustomerBean {
    String username;
    String password;
}

以@Data为例,看看Lombok为其生成了那些代码,查看target中的对应的class信息


package com.lipiao.traveltreasure.bean;

public class CustomerBean {
    String username;
    String password;

    public CustomerBean() {
    }

    public String getUsername() {
        return this.username;
    }

    public String getPassword() {
        return this.password;
    }

    public void setUsername(final String username) {
        this.username = username;
    }

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

    public boolean equals(final Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof CustomerBean)) {
            return false;
        } else {
            CustomerBean other = (CustomerBean)o;
            if (!other.canEqual(this)) {
                return false;
            } else {
                Object this$username = this.getUsername();
                Object other$username = other.getUsername();
                if (this$username == null) {
                    if (other$username != null) {
                        return false;
                    }
                } else if (!this$username.equals(other$username)) {
                    return false;
                }

                Object this$password = this.getPassword();
                Object other$password = other.getPassword();
                if (this$password == null) {
                    if (other$password != null) {
                        return false;
                    }
                } else if (!this$password.equals(other$password)) {
                    return false;
                }

                return true;
            }
        }
    }

    protected boolean canEqual(final Object other) {
        return other instanceof CustomerBean;
    }

    public int hashCode() {
        int PRIME = true;
        int result = 1;
        Object $username = this.getUsername();
        int result = result * 59 + ($username == null ? 43 : $username.hashCode());
        Object $password = this.getPassword();
        result = result * 59 + ($password == null ? 43 : $password.hashCode());
        return result;
    }

    public String toString() {
        return "CustomerBean(username=" + this.getUsername() + ", password=" + this.getPassword() + ")";
    }
}

作为对比,这是没有添加@Data注释前,target中CustomerBean.class的代码:

package com.lipiao.traveltreasure.bean;

public class CustomerBean {
    String username;
    String password;

    public CustomerBean() {
    }
}

可以看到多了以下方法:

getUsername()

getPassword()

setUsername(final String username)

setPassword(final String password)

equals(final Object o)

canEqual(final Object other)

hashCode()

toString()

发布了67 篇原创文章 · 获赞 32 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42391904/article/details/102569202