美文网首页陈大志的 Java 笔记
SpringBoot 实战 (三) | 使用 LomBok

SpringBoot 实战 (三) | 使用 LomBok

作者: JavaFish | 来源:发表于2019-01-23 22:39 被阅读248次

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

    前言

    上周去了开年会,去的地方是温泉度假村。老实说,我是无感的,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: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 类代码的简洁),代码如下:

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

    一个优秀的废人

    相关文章

      网友评论

        本文标题:SpringBoot 实战 (三) | 使用 LomBok

        本文链接:https://www.haomeiwen.com/subject/dwrjjqtx.html