Loading

java 优雅编程 之lombok开发利器

我们知道在最开始学习java的时候我们在编写pojo类时候需要手写getter,setter toString.....等,刚开始我们觉得还可以接受,乐于去编写的而且 java开发工具idea 也提供了这些快捷键可以一键生成属性对应的getter,setter,toString 等方法,不过即使这样我们每次还需要手动通过快捷键去生成,也是很繁琐不友好,而且当你一个实体类有大量属性时候就会产生大量getter,setter方法代码可读性就不是很好,这也就是java有时候为什么回显得臃肿的原因了,但是有什么好的解决办法呢,这是我们今天要说的Lombok

简单介绍

点击这里进入lombok官网正如Lombok介绍的一样

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

Project Lombok 是一个 Java 库,可自动插入您的编辑器并构建工具,为您的 Java 增添趣味。
永远不要再编写另一个 getter 或 equals 方法,通过一个注释,您的类就有一个功能齐全的构建器,自动化您的日志变量等等。

简而言之: Lombok可以通过注解形式来简化Java模版化代码也就是那些没有营养,却又不得不写的代码;像实体中定义的getter、setter、equals、hashcode、toString等方法).日志记录中引入日志记录器等,是提高Java开发人员,开发效率的语法糖!!!😄,用上这个后java开发也可以甜甜的,

Lombok大神 GitHub猛👇这里

如何使用Lombok

在项目中我们要添加Lombok依赖这里用maven为例

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

IDEA开发工具中使用需要在idea开发工具中安装lombok插件

  1. 打开idea偏好设置找到插件一栏搜索lombok插件

image.png
没安装话点击安装我这里已经安装了,所以提示我需要更新

  1. 安装好后点解应用---重启idea 后才会生效
    image.png

  2. 开启Enable annotation processing

image.png

这样到此就可以愉快的在项目中使用了

常用注解

实体类pojo

@Getter/@Setter

注解在属性上或者上可以同时使用,当注解在属性上时为实体类单个属性提供 getXxx 和 setXxx 方法当注解在类上时为整个类所有属性提供getXxx 和 setXxx 方法getXxx 和 setXxx 方法用于给属性获取值和设置值

@ToString

注解在类上实现toString()方法用于在打印对象时候会答应对象内容,而不是对象的地址如

image.png

@EqualsAndHashCode

注解在类上 实现equals()方法和hashCode()方法用于对象直接比较

@Data

注解在类上提供类所有属性的 getXxx 和 setXxx 方法,此外还提供了equals、canEqual、hashCode、toString 方法

@NoArgsConstructor

注解在类上为类提供一个无参的构造方法

@AllArgsConstructor

注解在类上为类提供一个全参的构造方法

@Builder

注解在类上实现一种Builder Patterns(生成器模式)的功能也就类似于函数链式赋值调用如

image.png

其他bean

@Slf4j/@Log4j2

注解在类上为类提供一个 属性名为log的日志对象用户为该类提高日志记录

@Synchronized

注解到方法上实现同步代码片段的功能也就是此方法同步执行

@SneakyThrows

注解到方法上可以实现在try...catch到异常后进行的throw操作

更多详细注解点击进入官网

模版代码示例

pojo

package cn.soboys.springbootmybatisplus.bean;

import lombok.*;

import java.io.Serializable;

/**
 * @author kenx
 * @version 1.0
 * @date 2021/6/29 10:03
 */

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@ToString
@Builder
public class User  implements Serializable {
    private static final long serialVersionUID = 6308315887056661996L;
    private String username;
    private int age;
    private String phone;
    private String addr;
}

测试

 @Test
    public void t() {

        //// 通用模式构建对象
        User u1 = new User();
        u1.setUsername("keawe");

        // Builder模式构建对象
        User u = User.builder().build();
        u.setUsername("kenx");

        User user = User.builder()
                .age(18).username("kennx").phone("12313241").addr("232").build();

        // 全参构造
        // 需要注意的是Lombok提供的全参构造是依赖属性在对象中定义顺序的,
        User u2 = new User("judy", 12, "120198341", "wewe");
        User u3 = new User("judy", 12, "120198341", "wewe");

        // toString使用
        System.out.println("toString" + user);
        System.out.println("toString"+u2);

        // equals()使用
        System.out.println("equals" + u.equals(user));
        //对象属性完全一样就是true
        System.out.println("equals" + u2.equals(u3));
    }

测试结果正常

image.png

上面注解可以简化成如下

@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class User  implements Serializable {
    private static final long serialVersionUID = 6308315887056661996L;
    private String username;
    private int age;
    private String phone;
    private String addr;
}

因为@Data注解就包含geXxx,SetXX,toString,equals、canEqual、hashCode方法不需要我们在单独写其注解

普通

package cn.soboys.springbootmybatisplus;

import cn.soboys.springbootmybatisplus.bean.User;
import lombok.SneakyThrows;
import lombok.Synchronized;
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;


/**
 * @author kenx
 * @version 1.0
 * @date 2021/6/29 10:02
 */
@Slf4j
public class LombokTest {
    
    @Test
    @Synchronized
    @SneakyThrows
    public void a() {
        log.info("1421121");
        throw new Exception("wew");
    }
}
posted @ 2021-06-29 11:19  程序员三时  阅读(115)  评论(0编辑  收藏  举报