Bootstrap

lombok使用总结

目录

简介

eclipse 配置lombok

下载 lombok jar包 

复制lombok.jar到eclipse.ini所在目录

编辑eclipse.ini

重启eclipse,clean project 即可完成

添加依赖

对字段进行操作 @getter  @setter

生成equals和hashcode  @EqualsAndHashCode

生成toString  @ToString

构造器函数  @NoArgsConstructor   @RequiredArgsConstructor    @AllArgsConstructor

实例化类 @Buidler

总方法 @Data

日志   @Log   @Log4j


简介


Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写,以期方便使用的方法;在使用Lombok之后,将由其来自动帮你实现代码生成,注意,其是 在运行过程中,帮你自动生成的 。就是说,将极大减少你的代码总量。
消除模板代码
getter、setter、构造器、toString()、equals()

便捷的生成比较复杂的代码,例如一个POJO要转化成构建器模式的形式,只需要一个注解。

eclipse 配置lombok

下载 lombok jar包 

https://projectlombok.org/download.html

lombok下载地址,进入该网址后可以看到如下界面,点击下载就行了。

复制lombok.jar到eclipse.ini所在目录

编辑eclipse.ini

增加

-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar 

重启eclipse,clean project 即可完成

重启eclipse,clean project 即可完成

 

添加依赖

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.16.10</version>
</dependency>

或者

<lombok.version>1.16.20</lombok.version>

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${lombok.version}</version>
    <scope>provided</scope>
</dependency>

对字段进行操作 @getter  @setter

@Getter/@Setter: 注解会为每一个标记的成员变量自动生成对应的方法。

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;

public class GetterSetterExample {

  @Getter 
  @Setter 
  private int age = 10;
  
  @Setter(AccessLevel.PROTECTED) 
  private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
}

生成equals和hashcode  @EqualsAndHashCode

默认情况下,会使用所有非静态(non-static)和非瞬态(non-transient)属性来生成equals和hasCode,也能通过exclude注解来排除一些属性。

import lombok.EqualsAndHashCode;

@EqualsAndHashCode(exclude={"id", "shape"})
public class EqualsAndHashCodeExample {
  private transient int transientVar = 10;
  private String name;
  private double score;
  private Shape shape = new Square(5, 10);
  private String[] tags;
  private int id;
  
  public String getName() {
    return this.name;
  }
  
  @EqualsAndHashCode(callSuper=true)
  public static class Square extends Shape {
    private final int width, height;
    
    public Square(int width, int height) {
      this.width = width;
      this.height = height;
    }
  }
}

生成toString  @ToString

类使用@ToString注解,Lombok会生成一个toString()方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。

通过将includeFieldNames参数设为true,就能明确的输出toString()属性。这一点是不是有点绕口,通过代码来看会更清晰些。

import lombok.ToString;

@ToString(exclude="id")
public class ToStringExample {
  private static final int STATIC_VAR = 10;
  private String name;
  private Shape shape = new Square(5, 10);
  private String[] tags;
  private int id;
  
  public String getName() {
    return this.getName();
  }
  
  @ToString(callSuper=true, includeFieldNames=true)
  public static class Square extends Shape {
    private final int width, height;
    
    public Square(int width, int height) {
      this.width = width;
      this.height = height;
    }
  }
}

等于

import java.util.Arrays;

public class ToStringExample {
  private static final int STATIC_VAR = 10;
  private String name;
  private Shape shape = new Square(5, 10);
  private String[] tags;
  private int id;
  
  public String getName() {
    return this.getName();
  }
  
  public static class Square extends Shape {
    private final int width, height;
    
    public Square(int width, int height) {
      this.width = width;
      this.height = height;
    }
    
    @Override public String toString() {
      return "Square(super=" + super.toString() + ", width=" + this.width + ", height=" + this.height + ")";
    }
  }
  
  @Override public String toString() {
    return "ToStringExample(" + this.getName() + ", " + this.shape + ", " + Arrays.deepToString(this.tags) + ")";
  }
}

构造器函数  @NoArgsConstructor   @RequiredArgsConstructor    @AllArgsConstructor

无参构造器、部分参数构造器、全参构造器。Lombok没法实现多种参数构造器的重载。

import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.NonNull;

@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class ConstructorExample<T> {
  private int x, y;
  @NonNull private T description;
  
  @NoArgsConstructor
  public static class NoArgsExample {
    @NonNull private String field;
  }
}

实例化类 @Buidler

@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Setter
@Getter
@Builder
public class Student {
    private String stuName;

    private Integer stuAge;

    private String stuClass;

    private Integer stuNumber;
}

测试类:
package com.jxlg.lance.springbootcorestudy.lombok;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

import static org.junit.Assert.*;

@RunWith(JUnit4.class)
public class StudentTest {

    @Test
    public void test(){
        Student student = Student.builder()
                .stuName("张三")
                .stuAge(12)
                .stuClass("高三")
                .stuNumber(12222)
                .build();
        System.out.println(student);
    }
}

结果:
Student(stuName=张三, stuAge=12, stuClass=高三, stuNumber=12222)

总方法 @Data

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

只有builder没有被包含在@data中

日志 @

 

日志   @Log   @Log4j

需要使用 Log 对象的地方使用 @Log4j(依项目日志框架决定)。

@Slf4j
public class SpringContextHolder 

就可以直接用log来打印日志

log.debug("abc");

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

;