Lombok 功能
@Data 注解,省去实体类中大量的get()和set()方法。
@Builder 注解,创建生成器。
各种其他注解
使用效果
然后就可以正常使用实体类了。
依赖
使用@Data等注解前,需要先安装Lombok插件。安装方法会在后文介绍。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
@Data
实体类
package com.example.datademo.web;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import lombok.Data;
@Data
public class StudentVO {
@NotBlank
@Size(min = 2, max = 5)
private String name;
@NotNull
@Min(18)
@Max(200)
private Integer age;
@NotEmpty
private List<Integer> courseIds;
@NotNull
@DateTimeFormat(iso = ISO.DATE)
private Date graduationDate;
}
接口内调用
package com.example.datademo.web;
import javax.validation.Valid;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("example")
public class ExampleController {
@GetMapping("test")
public String test() {
return "test ok!";
}
@GetMapping("student")
public StudentVO getStudent(@Valid StudentVO vo) {
String name = vo.getName();
vo.setName(name);
return vo;
}
}
接口内调用效果
单独调用 get() 和 set() 方法
实体类的 get()、set() 方法是可以正常使用的。
单独调用 toString() 方法
@Builder
代码
package com.example.datademo.web;
import lombok.Builder;
@Builder
public class Dialog {
private String tile;
private String content;
private String positiveButtonText;
private String negativeButtonText;
interface OnClickListenter {
void onClick();
}
private OnClickListenter positiveButtonListener;
public void run() {
positiveButtonListener.onClick();
}
}
使用
public static void main(String[] args) {
Dialog dialog = Dialog.builder()
.tile("标题")
.content("内容")
.positiveButtonText("确定")
.negativeButtonText("取消")
.positiveButtonListener(() -> {
System.out.println("回调");
})
.build();
System.out.println("运行");
dialog.run();
}
结果
@Singular
生成一个方法,用来向集合内添加一个元素。需要和@Builder一起用。
package com.example.vodemo.employee;
import java.util.List;
import lombok.Builder;
import lombok.Data;
import lombok.Singular;
@Data
@Builder
public class Student1 {
private Long id;
private String name;
@Singular("addHobby")
private List<String> hobby;
public static void main(String[] args) {
Student1 student = Student1.builder().id(300L).name("赵三").addHobby("篮球").addHobby("游泳").build();
System.out.println(student.toString());
}
}
val 和 var
public void testValAndVar() {
val student = new StudentVO();
// student = new StudentVO(); // val不可变
var student2 = new StudentVO();
student2 = new StudentVO();
}
@FieldNameConstants
package com.example.vodemo.employee;
import lombok.Data;
import lombok.experimental.FieldNameConstants;
@Data
@FieldNameConstants
public class StudentVO {
private Long id;
private String name;
}
public void field() {
System.out.println(StudentVO.Fields.id);
System.out.println(StudentVO.Fields.name);
}
@Accessors(chain = true) - 实验性注解
package com.example.vodemo.employee;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Student2 {
private Long id;
private String name;
public static void main(String[] args) {
Student2 vo = new Student2();
vo.setId(200L).setName("赵二");
System.out.println(vo.toString());
}
}
@Accessors(fluent = true) - 实验性注解
package com.example.vodemo.employee;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(fluent = true)
public class Student {
private Long id;
private String name;
public static void main(String[] args) {
Student student = new Student();
student.id(100L).name("张三");
System.out.println(student.toString());
System.out.println(student.id());
System.out.println(student.name());
}
}
其他注解
Equals方法和HashCode方法包含哪些字段
- @EqualsAndHashCode(of = { "id", "name" })
构造器的访问级别
- AccessLevel.PUBLIC
package com.example.vodemo.employee;
import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.Singular;
import lombok.experimental.Accessors;
import lombok.experimental.FieldNameConstants;
@Data
@EqualsAndHashCode(of = { "id", "name" })
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class StudentVO {
private Long id;
private String name;
}
package com.example.vodemo.employee;
import java.io.FileInputStream;
import java.io.IOException;
import lombok.Cleanup;
import lombok.SneakyThrows;
import lombok.Synchronized;
public class Test2 {
@SneakyThrows
public void testThrow() {
Thread.sleep(1000);
}
@Synchronized
public void sync() {
}
public void cleanup(String pathname) throws IOException {
@Cleanup
FileInputStream stream = new FileInputStream(pathname);
}
}
Lombok安装及依赖
@Data注解,需要将Lombok插件安装到IDE中,并在pom.xml中添加依赖。
1. 官网下载jar包
2.安装
Windows平台
双击下载好的lombak.jar,安装步骤如下:
关闭弹出的警告窗口,点击 Specify location…
D:\app\sts
这是我的STS的安装目录
重启STS ,安装就可以生效了。
Mac平台
- 进入到SpringToolSuite4.app包内容,将lombok.jar复制到和SpringToolSuite4.ini同级目录下;
- 在当前目录下启动终端,运行java -jar lombok.jar,选择到SpringToolSuite4.ini,点击install即可完成安装;
引入Lombok依赖
已存在的项目,可以直接在pom.xml中添加依赖。之后可能需要clean一下项目。
新建springboot项目时,可以直接选择添加lombok依赖。