Lombok使用总结

Lombok简介

Lombok 是一种Java实用工具,目的是消除JavaBean中冗余代码,比如getter/setter、toString、hashCode等等,通过注解达到相同目的;

Lombok原理

源文件编译生成class文件时,根据注解生成对应的字节码;

使用步骤

1. 添加maven依赖

非SpringBoot环境

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.6</version>
    <optional>true</optional>
</dependency>

SpringBoot环境

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

说明:option设为true是为了避免传递依赖;

2. IDE安装lombok插件

常用注解

@Getter/@Setter

用法: 作用在类上和属性上。放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。
java源文件如下:

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class User {
    private String name;

    public static void main(String[] args) {
        User user = new User();
        user.setName("name");
    }

class文件反编译后如下:

public class User {
    private String name;

    public User() {
    }

    public static void main(String[] args) {
        User user = new User();
        user.setName("name");
    }

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

    public String getName() {
        return this.name;
    }
}

@UtilityClass

用法: 作用在类上;
作用: 构造函数私有以及使用final修饰类;
源文件

@UtilityClass
public class JavaUtils {

    public static String getName() {
        return "name";
    }

    public static void main(String[] args) {
        System.out.println(JavaUtils.getName());

    }

class文件反编译后:

public final class JavaUtils {
    public static String getName() {
        return "name";
    }

    public static void main(String[] args) {
        System.out.println(getName());
    }

    private JavaUtils() {
        throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
    }
}

@ToString

用法: 作用在类上
作用: 生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。

@EqualsAndHashCode

用法: 作用在类上
作用: 默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。

@Data

用法: 作用在类上
作用: 包含@ToString, @EqualsAndHashCode, 所有属性的@Getter, 所有non-final属性的@Setter和@RequiredArgsConstructor的组合,通常情况下,基本上使用这个注解就足够了。

@Log

用法: 作用在类上
作用: 创建log属性

@Setter
@Getter
@ToString
@Log
public class User {
    private String name;

    public static void main(String[] args) {
        User user = new User();
        user.setName("name");
        log.info(user.toString());
    }
}
public class User {
    private static final Logger log = Logger.getLogger(User.class.getName());
    private String name;

    public User() {
    }

    public static void main(String[] args) {
        User user = new User();
        user.setName("name");
        log.info(user.toString());
    }

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

    public String getName() {
        return this.name;
    }

    public String toString() {
        return "User(name=" + this.getName() + ")";
    }
}

Lombok使用总结

参考:

  1. 官方地址:https://projectlombok.org/;
  2. github地址:https://github.com/rzwitserloot/lombok;
  3. https://www.jianshu.com/p/2ea9ff98f7d6;
  4. https://projectlombok.org/features/log;