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 感興趣請長按二維碼關注一波,我會努力帶給大家價值,若是以爲本文對你哪怕有一丁點幫助,請幫忙點好看,讓更多人知道。

一個優秀的廢人

相關文章
相關標籤/搜索