java开发利器(1)一lombok

本文介绍Lombok库如何通过注解自动实现Java实体类的getter、setter等方法,极大提高编码效率。涵盖Lombok的基本使用、常见注解及其实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lombok

前言

  封装是java语言中的三大特性之一,最常见的封装可能就是我们要将实体类中的属性使用private修饰符进行修饰,然后书写相应的公共访问器(get方法),修改器(set)方法。像这些方法的书写基本都是固定的,有的就是改一下名称啥的。

  记得刚开始学的时候很快就厌烦了写这些相同的代码,之后发现了一些集成开发环境中能够通过快捷键自动生成,也减少了一定的代码量的书写。但是到了后面随着编写项目实体类的增加发现这些快捷键按多了也烦了。

  lombok这个工具就可以帮助我们解决重复书写这类方法的问题。

实体类封装的代码历程:
手写get和set方法 - IDEA中自动生成 - 使用lombok注解自动生成

简介

Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而使您的Java更加有趣。永远不要再编写另一个getter或equals方法,带有一个注释的类将具有功能齐全的生成器,自动执行日志记录变量等等。-- 摘自官网

意思就是说lombok是通过注解的方式帮助我们在编译期的时候自动生成get和set等方法。

使用lombok步骤如下:

  1. IDEA中安装对应的lombok插件

路径: Setting-Plugins-lombok

  1. Maven工程中导入依赖

    <dependencies>
    	<dependency>
    		<groupId>org.projectlombok</groupId>
    		<artifactId>lombok</artifactId>
    		<version>1.18.16</version>
    		<scope>provided</scope>
    	</dependency>
    </dependencies>
    

    备注:使用provided作用域就行了,因为lombok是在编译时期生效的,后面的注解中可以看到。


使用

  lombok的是通过一组注解来替代get,set等模板方法的生成,常用的有如下几个注解:

@Data注解

  这个注解可以用来自动生成所有属性的get和set方法,toString方法,equals方法和hashCode方法。使用方式如下所示:

在这里插入图片描述

如果不使用@Data注解的话该类的代码行数就变得多了很多。

上述如果类不使用lombok注解的代码:

package cn.net.smrobot.lombok_learn.entity;
import java.util.Objects;
public class User {
    private String name;
    private int age;

    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 == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age && Objects.equals(name, user.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

可见使用lombok方式可以让整个类看起来简洁很多。

其他常用的注解使用方式如下:

注解名称作用
@Getter生成属性的get方法
@Setter生成属性的set方法
@ToString按照固定的格式生成toString方法
@@EqualsAndHashCode生成equals和hashCode方法
@NoArgsConstructor生成无参构造方法,通常和@AllArgsConstructor一起使用
@AllArgsConstructor生成所有属性的有参构造方法

在这里插入图片描述

因此如果要生成所有的这些方法,使用@Data注解就行了(不包括有参构造方法)。


@Accessors

该注解可以将类上的set方法开启链式调用的模式。即set方法中不再是返回void,而是返回该对象。其使用方式如下:

@Data
@Accessors(chain = true)
public class User {
    private String name;
    private int age;
    
    public static void main(String[] args) {
        User user = new User();
        user.setName("张三").setAge(20);	// 链式调用,简化set的书写
    }
}

属性chain=true就会开启链式调用。

其生成的set方法形式如下:

public User setName(String name) {
        this.name = name;
        return this;	// 返回了该对象
}

@Slf4j

该注解会自动在类中生成一个Logger日志对象

@Slf4j
@RestController
public UserController {
    // @Slf4j注解可以用来替换这条语句。
	//private Logger log = LoogerFactory.getLogger(this.getClass());
}

使用该注解后该类中就有一个名为"log"的Logger对象了。


原理

lombok的注解都是在源代码编译期生效的,例如@Data注解的源码

@Target({ElementType.TYPE})
// SOURCE时期生效
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
    String staticConstructor() default "";
}

而lombok就是通过在java的编译器(javac)将java代码编译成.class字节码文件时,修改了编译形成抽象语法树。

在这里插入图片描述


补充

有时候使用lombok并不能一劳永逸,可能在某些场景下也会出错。例如在spring data jpa中使用中间表查询时直接使用@Data注解有时候就会造成查询的死循环。所以在编程过程中出现错误时也可以考虑一下是不是lombok的问题。

但是总的来说lombok使用起来还是很方便的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值