Spring Boot 2从入门到入坟 | 最佳实践篇:使用Lombok插件来简化JavaBean的开发
发布日期:2021-06-30 17:57:28 浏览次数:3 分类:技术文章

本文共 6935 字,大约阅读时间需要 23 分钟。

写在前面

从这篇文章开始,我们来说一下以后在开发中用到的一些小技巧,这些小技巧是我们后来在编写代码时要经常用到的。在这篇文章中,我们首先来讲解第一个小技巧,即使用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插件的依赖,如下所示。

org.projectlombok
lombok

在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 * * 宠物 */@Datapublic 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@ToStringpublic 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@AllArgsConstructorpublic 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@NoArgsConstructorpublic 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@ToStringpublic 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@EqualsAndHashCodepublic 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@RestControllerpublic 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这样一个注解就行了。

转载地址:https://liayun.blog.csdn.net/article/details/116505492 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring Boot 2从入门到入坟 | 最佳实践篇:devtools开发者工具的简单使用
下一篇:Spring Boot 2从入门到入坟 | 最佳实践篇:Spring Boot应用该如何编写?

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月12日 08时59分32秒