Lombok是一个Java库,它经过注解来简化Java类的编写。它供给了一组注解,能够主动生成一些常见的Java代码,如getter和setter办法、构造函数、equals和hashCode办法等。

根本介绍

运用Lombok插件能够让开发者在集成开发环境(IDE)中更方便地运用Lombok。插件供给了对Lombok注解的支持,能够主动识别并处理这些注解,生成相应的代码。

官网如下:projectlombok.org/

功率提高东西-LOMBOK注解-(一)根本介绍

install中是各种运用方式集成介绍,本文首要依据IDEA运用

  1. IDEA下载LOMBOK插件

功率提高东西-LOMBOK注解-(一)根本介绍

如果IDEA里面查找不到,能够去下面拆件网关查找 plugins.jetbrains.com/plugin/6317…

  1. MVN项目增加POM依赖
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
</dependency>

运用介绍

常见注解

@NonNull

运用在入参上,相当于主动做了判空

import lombok.NonNull;
public class NonNullExample extends Something {
  private String name;
  public NonNullExample(@NonNull Person person) {
    super("Hello");
    this.name = person.getName();
  }
}

相当于


import lombok.NonNull;
public class NonNullExample extends Something {
  private String name;
  public NonNullExample(@NonNull Person person) {
    super("Hello");
    if (person == null) {
      throw new NullPointerException("person is marked non-null but is null");
    }
    this.name = person.getName();
  }
}

@Getter/@Setter

升了很多主动主动写get set办法

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
/**
 * @author toby
 * @date 2023/12/10 16:33
 */
public class GetterSetterExample {
    /**
     * Age of the person. Water is wet.
     *
     * @param age New value for this person's age. Sky is blue.
     * @return The current value of this person's age. Circles are round.
     */
    @Getter
    @Setter
    private int age = 10;
    /**
     * Name of the person.
     * -- SETTER --
     * Changes the name of this person.
     *
     * @param name The new value.
     */
    @Setter(AccessLevel.PROTECTED)
    private String name;
    @Override
    public String toString() {
        return String.format("%s (age: %d)", name, age);
    }
}

相当于JAVA

public class GetterSetterExample {
  /**
   * Age of the person. Water is wet.
   */
  private int age = 10;
  /**
   * Name of the person.
   */
  private String name;
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
  /**
   * Age of the person. Water is wet.
   *
   * @return The current value of this person's age. Circles are round.
   */
  public int getAge() {
    return age;
  }
  /**
   * Age of the person. Water is wet.
   *
   * @param age New value for this person's age. Sky is blue.
   */
  public void setAge(int age) {
    this.age = age;
  }
  /**
   * Changes the name of this person.
   *
   * @param name The new value.
   */
  protected void setName(String name) {
    this.name = name;
  }
}

@ToString

主动生成tostring办法

@EqualsAndHashCode

生成hashCodeequals

@Data

A shortcut for@ToString,@EqualsAndHashCode,@Getteron all fields, and@Setteron all non-final fields, and@RequiredArgsConstructor

其他注解

一切注解介绍也能够查看这个url:projectlombok.org/api/

原理说明

Lombok插件的原理是经过在编译期间对Java源代码进行注解处理器的处理,生成重复代码的部分,并将其刺进到生成的字节码中。

当你在Java类中运用Lombok注解时,IDE会将这些注解标记为特殊的标记,并将它们传递给Lombok插件。在编译过程中,当编译器遇到这些标记时,它会将代码的控制权传递给Lombok的注解处理器。

Lombok的注解处理器会解析这些注解,并依据注解的界说生成相应的代码。例如,当你在一个字段上运用@Getter注解时,Lombok会主动生成该字段的getter办法。类似地,当你运用@Setter注解时,Lombok会生成setter办法。这些生成的代码将被刺进到编译期间生成的字节码中。

在实践的完成中,Lombok运用了Java的注解处理API(javax.annotation.processing)来创立自界说的注解处理器。Lombok的注解处理器会扫描Java源代码中的注解,并运用AST(Abstract Syntax Tree,笼统语法树)来解析和修正源代码。它会依据注解的类型和参数生成相应的代码,并将其增加到AST中的适当方位。终究,修正后的AST将被转换回Java源代码,并由编译器编译成字节码。

需要留意的是,Lombok的代码生成是在编译期间进行的,而不是在运行时。生成的代码将成为终究的字节码的一部分,而不是在运行时运用反射或动态署理来生成代码。这样能够避免运行时功能开支,并使生成的代码在运行时具有与手动编写代码相同的行为。

详细比方,比方前文的GetterSetterExample,终究生成的class反编译后如下:

功率提高东西-LOMBOK注解-(一)根本介绍