SpringBoot 实战 (四) | 使用 LomBok

微信公众号:一个优秀的废人
若有问题或建议,请后台留言,我会尽力解决你的问题。

前言

上周去了开年会,去的地方是温泉度假村。老实说,我是无感的,90% 是由于没中奖(老板太抠,两百人只抽三个奖),10 % 是由于从小泡温泉长大没啥感受。java

LomBok 是什么?

LomBok 是一个插件,它能经过注解帮咱们消除那些必需要写可是重复的代码,好比setter,getter,构造函数之类的方法。git

试想一个场景,在项目开发中,咱们每每须要定义大量的数据库实体或者某些工具 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方法。

如何安装?

一、直接从 http://plugins.jetbrains.com/ 下载,而后放到IDEA 安装文件下面的 plugins,而后重启 IDEA。github

二、在 IDEA 的 settings(windows)或者Preferences(mac),下找到 plugins 菜单,点击 Browse repositories,以下图web

Browse repositories

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

搜索 LomBok

代码演示

新建 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 的类,代码以下:apache

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 类代码的简洁),代码以下:windows

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 感兴趣请长按二维码关注一波,我会努力带给大家价值,若是以为本文对你哪怕有一丁点帮助,请帮忙点好看,让更多人知道。

一个优秀的废人

相关文章
相关标签/搜索