【第25章】spring-整合Lombok


前言

Lombok是一个Java库,它使用注解来简化Java代码的编写。通过添加注解,Lombok能够自动生成常见的代码,如getter和setter方法、构造函数、equals和hashCode方法等,从而减少了开发者的重复劳动。

具体来说,Lombok的主要优势在于它可以在编译时根据注解自动生成这些代码,使得开发者不需要手动编写这些样板代码。这不仅提高了开发效率,也使得代码更加简洁和易读。同时,Lombok还提供了其他有用的功能,如自动化日志变量等。

总的来说,Lombok是一个强大的工具,它能够帮助开发者提高Java开发效率,减少冗余代码,使代码更加整洁和易于维护。然而,使用Lombok时,开发者需要确保团队中的所有成员都熟悉该工具,以避免在协作开发中出现理解上的障碍。同时,对于某些复杂的业务逻辑,手动编写的代码可能更加灵活和可控。


一、准备

1. 安装插件

File>Settings>Plugins
在这里插入图片描述

2. 引入库

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

二、使用

1.实体类

package org.example.spel.po;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Create by zjg on 2024/4/22
 */
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
public class Summons {
    private int id;
    private String defendantName;
    private String defendantGende;
    private int defendantAge;
    private String defendantUnit;
    private String caseNature;
    private String plaintiffName;
    private Date hearingDate;
    private String hearingVenue;
    private String courtName;
    private String courtAddress;
    private String contactPhone;
    private Date summonsDate;
    public String format(Date date,String pattern) {
        return new SimpleDateFormat(pattern).format(date);
    }
}

2.测试类

package org.example.spel.lombok;

import org.example.spel.po.Summons;
import java.time.ZonedDateTime;
import java.util.Date;

/**
 * Create by zjg on 2024/4/22
 */
public class Main {
    public static void main(String[] args) {
        Summons summons = new Summons();
        summons.setId(1);
        System.out.println(summons.getId());
        System.out.println(summons.toString());
        Summons build = Summons.builder().id(2).defendantName("被告姓名").defendantGende("男").defendantAge(25).defendantUnit("被告单位")
                .caseNature("案例性质").plaintiffName("原告姓名").hearingDate(Date.from(ZonedDateTime.now().plusDays(7).withHour(10).withMinute(0).withSecond(0).toInstant()))
                .hearingVenue("听证会地点").courtName("法院名称").courtAddress("法院地址").contactPhone("联系电话").summonsDate(new Date()).build();
        System.out.println(build.toString());
    }
}


3.测试结果

1
Summons(id=1, defendantName=null, defendantGende=null, defendantAge=0, defendantUnit=null, caseNature=null, plaintiffName=null, hearingDate=null, hearingVenue=null, courtName=null, courtAddress=null, contactPhone=null, summonsDate=null)
Summons(id=2, defendantName=被告姓名, defendantGende=男, defendantAge=25, defendantUnit=被告单位, caseNature=案例性质, plaintiffName=原告姓名, hearingDate=Mon Apr 29 10:00:00 CST 2024, hearingVenue=听证会地点, courtName=法院名称, courtAddress=法院地址, contactPhone=联系电话, summonsDate=Mon Apr 22 20:00:41 CST 2024)

可以看到,实体类中没有对应的get和set方法,在程序运行的时候却能正常使用,toString方法也帮我们打印出了所有的属性。

4. 日志

package org.example.spel.lombok;

import lombok.extern.log4j.Log4j2;
import org.example.spel.po.Summons;
import java.time.ZonedDateTime;
import java.util.Date;

/**
 * Create by zjg on 2024/4/22
 */
@Log4j2
public class Main {
    public static void main(String[] args) {
        Summons summons = new Summons();
        summons.setId(1);
        log.debug(summons.getId());
        log.debug(summons.toString());
        Summons build = Summons.builder().id(2).defendantName("被告姓名").defendantGende("男").defendantAge(25).defendantUnit("被告单位")
                .caseNature("案例性质").plaintiffName("原告姓名").hearingDate(Date.from(ZonedDateTime.now().plusDays(7).withHour(10).withMinute(0).withSecond(0).toInstant()))
                .hearingVenue("听证会地点").courtName("法院名称").courtAddress("法院地址").contactPhone("联系电话").summonsDate(new Date()).build();
        log.debug(build.toString());
    }
}

[2024-04-22 20:02:13.456][main][DEBUG]- org.example.spel.lombok.Main.main(Main.java:16) - 1
[2024-04-22 20:02:13.519][main][DEBUG]- org.example.spel.lombok.Main.main(Main.java:17) - Summons(id=1, defendantName=null, defendantGende=null, defendantAge=0, defendantUnit=null, caseNature=null, plaintiffName=null, hearingDate=null, hearingVenue=null, courtName=null, courtAddress=null, contactPhone=null, summonsDate=null)
[2024-04-22 20:02:13.534][main][DEBUG]- org.example.spel.lombok.Main.main(Main.java:21) - Summons(id=2, defendantName=被告姓名, defendantGende=男, defendantAge=25, defendantUnit=被告单位, caseNature=案例性质, plaintiffName=原告姓名, hearingDate=Mon Apr 29 10:00:00 CST 2024, hearingVenue=听证会地点, courtName=法院名称, courtAddress=法院地址, contactPhone=联系电话, summonsDate=Mon Apr 22 20:02:13 CST 2024)


我这里是用的log4j2的日志,所以使用@Log4j2注解,不需要像以前每个类都要写
private static Logger logger = LoggerFactory.getLogger(Main.class);
现在加一个注解就可以了。

三、常用注解

以下是一个Lombok常用注解及其描述的表格:

注解描述
@Getter为类的属性自动生成getter方法。
@Setter为类的属性自动生成setter方法。
@ToString自动生成包含所有字段的toString方法。
@EqualsAndHashCode自动生成equals和hashCode方法。
@NoArgsConstructor自动生成一个无参数的构造函数。
@AllArgsConstructor自动生成一个包含所有字段的构造函数。
@RequiredArgsConstructor自动生成一个包含需要特殊处理的字段(如final字段)的构造函数。
@Data这是一个复合注解,它包括了@Getter、@Setter、@EqualsAndHashCode、@ToString和@RequiredArgsConstructor的功能。
@Value类似于@Data,但是所有字段都是final的,并会生成所有字段的getter方法,但不会生成setter方法,并且类会被设置为final。
@Builder允许你以构建器模式构建对象。
@Slf4j自动为类添加一个SLF4J的日志记录器实例。
@Cleanup自动管理资源,如关闭流或连接,在try-with-resources语句中使用。

总结

回到顶部

Lombok最大的好处是让代码更加简洁,当你的实体对象属性数量几十或者上百的时候,添加些许注解就可省略上百行代码,岂不美哉。
坏处也有,它是侵入式的;举个例子:我在代码中使用了Lombok,并将代码提交到git,同事小王更新代码之后发现他本地无法启动了,小王也进行了Lombok插件的安装,之后就正常了,就跟流氓软件似的,所以有好有坏,因此在使用Lombok时也需要根据具体情况进行权衡和选择。

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值