SpringBoot 實戰 | 使用 LomBok

微信公衆號:一個優秀的廢人
如有問題或建議,請後臺留言,我會盡力解決你的問題。

前言

上週去了開年會,去的地方是溫泉度假村。老實說,我是無感的,90% 是因爲沒中獎(老闆太摳,兩百人只抽三個獎),10 % 是因爲從小泡溫泉長大沒啥感覺。

LomBok 是什麼?

LomBok 是一個插件,它能通過註解幫我們消除那些必須要寫但是重複的代碼,比如setter,getter,構造函數之類的方法。

試想一個場景,在項目開發中,我們往往需要定義大量的數據庫實體或者某些工具 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方法。

如何安裝?

1、直接從 http://plugins.jetbrains.com/ 下載,然後放到IDEA 安裝文件下面的 plugins,然後重啓 IDEA。

2、在 IDEA 的 settings(windows)或者Preferences(mac),下找到 plugins 菜單,點擊 Browse repositories,如下圖

Browse repositories

第二步搜索 LomBok 點擊 Install (我這裏已經安裝了,但是有更新。所以顯示的是 Update 按鈕)重啓 IDEA 。

搜索 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 的類,代碼如下:

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:[email protected]">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 類代碼的簡潔),代碼如下:

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:[email protected]">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:[email protected]">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 感興趣請長按二維碼關注一波,我會努力帶給你們價值,如果覺得本文對你哪怕有一丁點幫助,請幫忙點好看,讓更多人知道。

一個優秀的廢人

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章