乐趣区

SpringBoot 实战 | 使用 LomBok

微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。
前言
上周去了开年会,去的地方是温泉度假村。老实说,我是无感的,90% 是因为没中奖(老板太抠,两百人只抽三个奖),10 % 是因为从小泡温泉长大没啥感觉。
LomBok 是什么?
LomBok 是一个插件,它能通过注解帮我们消除那些必须要写但是重复的代码,比如 setter,getter,构造函数之类的方法。
试想一个场景,在项目开发中,我们往往需要定义大量的数据库实体或者某些工具 Bean,每一个 Bean 都需要我们编写 getter、setter 方法、构造方法以及 toString 等方法。这是一个非常繁琐的过程。程序员准则,做三遍以上的重复事情就必须想办法让它自动化了。所以今天给你们介绍一个牛逼的插件「LomBok」。
LomBok 常用注解简介
@Data:注解在类上,将类提供的所有属性都添加 get、set 方法,并添加、equals、canEquals、hashCode、toString 方法
@Setter:注解在类上,为所有属性添加 set 方法、注解在属性上为该属性提供 set 方法
@Getter:注解在类上,为所有的属性添加 get 方法、注解在属性上为该属性提供 get 方法
@NotNull:在参数中使用时,如果调用时传了 null 值,就会抛出空指针异常
@Synchronized 用于方法,可以锁定指定的对象,如果不指定,则默认创建一个对象锁定
@Log 作用于类,创建一个 log 属性
@Builder:使用 builder 模式创建对象
@NoArgsConstructor:创建一个无参构造函数
@AllArgsConstructor:创建一个全参构造函数
@ToStirng:创建一个 toString 方法
@Accessors(chain = true) 使用链式设置属性,set 方法返回的是 this 对象。
@RequiredArgsConstructor:创建对象
@UtilityClass: 工具类
@ExtensionMethod: 设置父类
@FieldDefaults:设置属性的使用范围,如 private、public 等,也可以设置属性是否被 final 修饰。
@Cleanup: 关闭流、连接点。
@EqualsAndHashCode:重写 equals 和 hashcode 方法。
@toString:创建 toString 方法。
如何安装?
1、直接从 http://plugins.jetbrains.com/ 下载,然后放到 IDEA 安装文件下面的 plugins,然后重启 IDEA。
2、在 IDEA 的 settings(windows)或者 Preferences(mac),下找到 plugins 菜单,点击 Browse repositories,如下图

第二步搜索 LomBok 点击 Install(我这里已经安装了,但是有更新。所以显示的是 Update 按钮)重启 IDEA。

代码演示
新建 SpringBoot 项目,不会构建的看这篇文章 使用 IDEA 构建 Spring Boot 工程,构建时勾选 web 依赖和 Lombok 依赖,完整 pom 如下:
<?xml version=”1.0″ encoding=”UTF-8″?>
<project xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!– lookup parent from repository –>
</parent>
<groupId>com.nasus</groupId>
<artifactId>lombok</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>lombok</name>
<description>lombok_demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
新建一个 Student 类,这是使用 lombok 的类,代码如下:
package com.nasus.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* Project Name:springboot_lomnok_demo <br/>
* Package Name:com.nasus.entity <br/>
* Date:2019/1/23 0023 14:32 <br/>
* <b>Description:</b> TODO: 描述该类的作用 <br/>
*
* @author <a href=”mailto:chenzy@eastcom-sw.com”>chenzy</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
@Data // 自动生成 set/get 方法,toString 方法,equals 方法,hashCode 方法,不带参数的构造方法
@AllArgsConstructor // 自动生成构造方法
@NoArgsConstructor // 自动生成构造方法
public class Student {

private String id;
private String name;
private int age;

}

新建一个 StudentNoLombok 类,这是没有使用 lombok 的类(此类在项目中无用处,只为与使用 Lombok 的类对比,突出使用 LomBok 类代码的简洁),代码如下:
package com.nasus.entity;

import java.util.Objects;

/**
* Project Name:springboot_lomnok_demo <br/>
* Package Name:com.nasus.entity <br/>
* Date:2019/1/23 0023 14:34 <br/>
* <b>Description:</b> TODO: 描述该类的作用 <br/>
*
* @author <a href=”mailto:chenzy@eastcom-sw.com”>chenzy</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
public class StudentNoLombok {

private String id;
private String name;
private int age;

public StudentNoLombok() {
}

public StudentNoLombok(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

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

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof StudentNoLombok)) {
return false;
}
StudentNoLombok that = (StudentNoLombok) o;
return age == that.age &&
Objects.equals(id, that.id) &&
Objects.equals(name, that.name);
}

@Override
public int hashCode() {

return Objects.hash(id, name, age);
}

@Override
public String toString() {
return “StudentNoLombok{” +
“id='” + id + ‘\” +
“, name='” + name + ‘\” +
“, age=” + age +
‘}’;
}
}
从上面两个类对比可以看出,使用 LomBok 插件的类比不使用简洁美观得多。
新建 StudentController 类,代码如下:
package com.nasus.controller;

import com.nasus.entity.Student;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* Project Name:springboot_lomnok_demo <br/>
* Package Name:com.nasus.controller <br/>
* Date:2019/1/23 0023 14:37 <br/>
* <b>Description:</b> TODO: 描述该类的作用 <br/>
*
* @author <a href=”mailto:chenzy@eastcom-sw.com”>chenzy</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
@RestController
@RequestMapping(“/student”)
public class StudentController {

@GetMapping(“/testLombok”)
public Student getStudent(){
Student student = new Student();
student.setId(“6666666666”);
student.setAge(24);
student.setName(“ 陈志远 ”);
System.out.println(student.toString());
return student;
}

}
启动项目,访问地址 http://localhost:8080/student/testLombok 浏览器输出如下:

控制台输出如下:

由上面两个输出结果可以看出,LomBok 插件起作用了。即使 Student 没有重写 toString 方法,依然可以调用,而且结果和重写了 toString 方法一样。
当项目很庞大的时候,往往基础的 Bean 也非常多。建议看到这篇文章的你可以在项目中把 LomBok 用起来。
最后奉上 项目完整代码
后语
以上就是我对 LomBok 插件的理解与使用,希望对你们有帮助。最后,对 Python、Java 感兴趣请长按二维码关注一波,我会努力带给你们价值,如果觉得本文对你哪怕有一丁点帮助,请帮忙点好看,让更多人知道。

退出移动版