Spring Boot 2从入门到入坟 | 最佳实践篇:使用Lombok插件来简化JavaBean的开发
Posted 李阿昀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 2从入门到入坟 | 最佳实践篇:使用Lombok插件来简化JavaBean的开发相关的知识,希望对你有一定的参考价值。
写在前面
从这篇文章开始,我们来说一下以后在开发中用到的一些小技巧,这些小技巧是我们后来在编写代码时要经常用到的。在这篇文章中,我们首先来讲解第一个小技巧,即使用Lombok插件来简化我们JavaBean的开发。
使用Lombok插件来简化JavaBean的开发
我们之前在开发JavaBean的时候,还是有几处比较麻烦的地方的,不知你看出来了没有。
第一个麻烦之处是咱们要编写JavaBean的getter/setter方法;第二个麻烦之处是我们经常要为JavaBean添加有参/无参构造器,以及还得重写它的toString方法。而使用Lombok插件之后,这些我们就能简化掉了。
那怎么使用Lombok插件来简化我们JavaBean的开发呢?很简单,只须遵循下面这几个步骤即可。
引入对Lombok插件的依赖
首先,我们得给咱们的项目里面引入对Lombok插件的依赖,记住咱是不用写依赖版本号的,因为Spring Boot已经默认管理了该依赖的版本。关于这点,我们就已经在下面这篇文章中分析过了。
咱也不妨再看看,打开咱们maven项目的pom.xml文件,发现咱们的maven项目继承了如下这样一个父项目,该父项目是来做依赖管理的。
我们不妨点进以上父项目里面去看一看,如下图所示,发现它里面还有一个父项目。
我们不妨再来点进以上父项目里面去看一看,点进来以后,我们可以看到它里面有一对<properties></properties>
标签,在该标签里面声明了几乎我们开发中常用的那些jar包的版本号,如下图所示。
咱不妨来搜索一下Lombok插件的依赖,看看它的版本号是多少,如下图所示,可以看到其版本号是1.18.20
。
还是回到主题吧!我们要做的第一步就是在maven项目里面引入对Lombok插件的依赖,如下所示。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
在IDEA中搜索安装Lombok插件
除了在咱们的maven项目里面引入对Lombok插件的依赖之外,我们还得在IDEA中搜索安装Lombok插件,这样它就会来帮我们自动的生成JavaBean的getter/setter方法了,当然了,还有其他的东东。大家一定得注意了,Lombok插件是在程序编译的时候才会帮我们生成那些玩意,所以咱们的源代码看起来会很清晰。
至于如何在IDEA中安装Lombok插件,不用我屁话了吧!你要是真不会,不妨仔细看看我写的下面这篇博客。
在IDEA中安装插件很简单的啦!其实,如果你用的是比较新的IDEA,比如笔者用的IntelliJ IDEA 2020.3.3
,那么你也不需要再安装Lombok插件了,因为IntelliJ IDEA 2020.3.3
早就已经集成该插件了。
使用Lombok插件
现在,我们就能在咱的程序里面使用Lombok插件了。使用上该插件之后,在咱开发的JavaBean里面,你就再也不用写那些getter/setter方法、有参/无参构造器以及toString方法了,如此一来,JavaBean里面就保持得很干净了。当然,要是你不使用Lombok插件,而且还堂而皇之的不写属性的getter/setter方法,那么这些属性就相当于跟没有一样。
接下来,我就来告诉大家如何在咱开发的JavaBean里面使用Lombok插件(的注解)。
@Data注解
首先,我们来看Lombok插件里面的第一个注解,即@Data
,该注解是来帮我们生成我们已有属性的getter/setter方法的。下面我就以Pet类为例来进行演示了哟😊
先把Pet类里面name属性的getter/setter方法给删除掉,然后在Pet类上标注一个@Data
注解,如下所示。
package com.meimeixia.boot.bean;
import lombok.Data;
/**
* @author liayun
* @create 2021-04-23 19:16
*
* 宠物
*/
@Data
public class Pet {
private String name;
public Pet() {
}
public Pet(String name) {
this.name = name;
}
@Override
public String toString() {
return "Pet{" +
"name='" + name + '\\'' +
'}';
}
}
这样,在程序编译的时候@Data
注解就会帮我们生成name属性的getter/setter方法了。
@ToString注解
@ToString
注解是在程序编译的时候自动帮我们生成JavaBean的toString方法的,注意不是在源代码中就给我们生成了哟😊,因此我们的源代码会看起来很清爽。
那么,@ToString
注解该怎么用呢?很简单,先把Pet类里面的toString方法给删除掉,然后在Pet类上标注一个@ToString
注解,如下所示。
package com.meimeixia.boot.bean;
import lombok.Data;
import lombok.ToString;
/**
* @author liayun
* @create 2021-04-23 19:16
*
* 宠物
*/
@Data
@ToString
public class Pet {
private String name;
public Pet() {
}
public Pet(String name) {
this.name = name;
}
}
@AllArgsConstructor注解
在JavaBean里面,我们得经常添加有参无参构造器,如果还是像之前一样以手写或者快捷键的方式来生成,未免有些麻烦。而现在用上Lombok插件之后,一个注解就能搞定了。这里,我们先来看一下@AllArgsConstructor
注解,该注解是使用JavaBean中所有属性来帮我们生成一个有参构造器的,即全参构造器。
那么,@AllArgsConstructor
注解该怎么用呢?很简单,先把Pet类里面的有参构造器给删除掉,然后在Pet类上标注一个@AllArgsConstructor
注解,如下所示。
package com.meimeixia.boot.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
/**
* @author liayun
* @create 2021-04-23 19:16
*
* 宠物
*/
@Data
@ToString
@AllArgsConstructor
public class Pet {
private String name;
public Pet() {
}
}
@NoArgsConstructor注解
@NoArgsConstructor
注解是来帮我们生成JavaBean的无参构造器的。
那么,@NoArgsConstructor
注解该怎么用呢?很简单,先把Pet类里面的无参构造器给删除掉,然后在Pet类上标注一个@NoArgsConstructor
注解,如下所示。
package com.meimeixia.boot.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* @author liayun
* @create 2021-04-23 19:16
*
* 宠物
*/
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Pet {
private String name;
}
看到了没有,咱们的源代码是不是看起来非常清爽了啊!
举一反三,大家接下来不妨将如下User类也给整改一下,不知道你会不会?
package com.meimeixia.boot.bean;
/**
* @author liayun
* @create 2021-04-23 19:14
*
* 用户
*/
public class User {
private String name;
private Integer age;
private Pet pet;
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
public User() {
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\\'' +
", age=" + age +
", pet=" + pet +
'}';
}
}
使用上Lombok插件里面的注解之后,不知道大家是不是写成了下面这样?
package com.meimeixia.boot.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* @author liayun
* @create 2021-04-23 19:14
*
* 用户
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
private String name;
private Integer age;
private Pet pet;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
}
大家可一定要注意了,以上@AllArgsConstructor
注解是来帮我们生成JavaBean的全参构造器的。如果你不想使用JavaBean中所有属性来生成一个有参构造器,例如只想使用JavaBean中name和age这两个属性来生成一个有参构造器,那么这就得你自己来写了,就像上面那样。这样,灵活性是不是就比较强一点了啊!
@EqualsAndHashCode注解
@EqualsAndHashCode
注解是使用JavaBean中所有属性来帮我们重写JavaBean的equals和hashCode这俩方法的。
该注解使用起来也特别简单,即在JavaBean上标注该注解就行,如下所示。
package com.meimeixia.boot.bean;
import lombok.*;
/**
* @author liayun
* @create 2021-04-23 19:14
*
* 用户
*/
@Data
@NoArgsConstructor
//@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class User {
private String name;
private Integer age;
private Pet pet;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
}
@Slf4j注解
Lombok插件里面还有一个注解,即@Slf4j
,使用上该注解之后就相当于注入了日志相关组件,因此可以简化日志开发,这样,我们以后就再也不用通过输出语句来打印日志了。若我们想要记录东西,则使用日志即可。
那么,@Slf4j
注解又该怎么用呢?很简单,我们不妨在HelloController类上标注上该注解,如此一来,该注解就会自动给HelloController这个类里面注入log这样一个属性(组件)了,也即日志记录器,然后咱就可以使用该日志记录器来记录日志了。
package com.meimeixia.boot.controller;
import com.meimeixia.boot.bean.Car;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @author liayun
* @create 2021-04-19 4:24
*/
@Slf4j
@RestController
public class HelloController {
@Autowired
Car car; // car实例里面每一个属性的值都是跟配置文件进行绑定的
@RequestMapping("/car")
public Car car() {
return car;
}
@RequestMapping("/hello")
public String handle01(@RequestParam("name") String name) {
// 在HelloController类上标注了@Slf4j注解之后,该注解会自动给HelloController这个类里面注入log这样一个属性(组件),也即日志记录器
log.info("请求进来了......");
return "Hello, Spring Boot 2!" + "你好:" + name;
}
}
此时,我们就来做一个测试,看一下我们整个Spring Boot应用的所有功能是不是都能正常运行。
重新启动咱们的Spring Boot应用,然后在浏览器中访问hello请求,访问成功之后,可以看到我们的日志也是能正常打印出来的,如下图所示。
所以,如果我们后来要经常用到日志,那么只须使用@Slf4j
这样一个注解就行了。
以上是关于Spring Boot 2从入门到入坟 | 最佳实践篇:使用Lombok插件来简化JavaBean的开发的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2从入门到入坟 | 最佳实践篇:devtools开发者工具的简单使用
Spring Boot 2从入门到入坟 | 最佳实践篇:使用Lombok插件来简化JavaBean的开发
Spring Boot 2从入门到入坟 | 基础入门篇:「Spring Boot 2从入门到入坟」系列教程介绍
Spring Boot 2从入门到入坟 | 基础入门篇:「Spring Boot 2从入门到入坟」系列教程介绍