怎么使用Lombok插件来简化我们JavaBean的开发呢?

使用Lombok插件来简化JavaBean的开发

我们之前在开发JavaBean的时候,还是有几处比较麻烦的地方的,不知你看出来了没有。

第一个麻烦之处是咱们要编写JavaBean的getter/setter方法;第二个麻烦之处是我们经常要为JavaBean添加有参/无参构造器,以及还得重写它的toString方法。而使用Lombok插件之后,这些我们就能简化掉了。

那怎么使用Lombok插件来简化我们JavaBean的开发呢?很简单,只须遵循下面这几个步骤即可。

引入对Lombok插件的依赖

首先,我们得给咱们的项目里面引入对Lombok插件的依赖,记住咱是不用写依赖版本号的,因为Spring Boot已经默认管理了该依赖的版本。

咱也不妨再看看,打开咱们maven项目的pom.xml文件,发现咱们的maven项目继承了如下这样一个父项目,该父项目是来做依赖管理的。

image.png

我们不妨点进以上父项目里面去看一看,如下图所示,发现它里面还有一个父项目。

image.png

我们不妨再来点进以上父项目里面去看一看,点进来以后,我们可以看到它里面有一对<properties></properties>标签,在该标签里面声明了几乎我们开发中常用的那些jar包的版本号,如下图所示。


image.png

咱不妨来搜索一下Lombok插件的依赖,看看它的版本号是多少,如下图所示,可以看到其版本号是1.18.20。


image.png

还是回到主题吧!我们要做的第一步就是在maven项目里面引入对Lombok插件的依赖,如下所示。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

在IDEA中搜索安装Lombok插件

除了在咱们的maven项目里面引入对Lombok插件的依赖之外,我们还得在IDEA中搜索安装Lombok插件,这样它就会来帮我们自动的生成JavaBean的getter/setter方法了,当然了,还有其他的东东。大家一定得注意了,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请求,访问成功之后,可以看到我们的日志也是能正常打印出来的,如下图所示。


image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容