当前位置: 首页 > news >正文

Lombok :简化 Java 编程的得力工具

在 Java 开发过程中,常常需要编写大量的样板代码,例如构造函数、Getter 和 Setter 方法、equals 和 hashCode 方法等。这些代码虽然逻辑相对固定,但编写起来却较为繁琐且容易出错,并且会使代码显得冗长。Lombok 应运而生,它通过注解的方式自动为 Java 类生成这些常用的方法,极大地简化了代码编写过程,让开发者能够将更多精力集中在业务逻辑的实现上。

 1.Getter 和 Setter 方法生成


在普通的Java 类中,如果有私有属性,通常需要手动编写对应的 Getter 和 Setter 方法。例如:

public class student {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;}
}


使用Lombok后,只需在类上添加@Getter和@Setter注解:

@Getter
@Setter
public class student {private String name;private int age;
}


这样 Lombok 会自动为name和age属性生成Getter和Setter方法,大大减少了代码量。

 2.构造函数生成
 

若要生成无参构造函数,可使用@NoArgsConstructor注解,例如:

@NoArgsConstructor
public class Student {private String id;private String major;
}


 程序会自动生成如下无参构造函数:

public Student() {}


全参构造函数:@AllArgsConstructor注解可生成包含所有属性的全参构造函数,例如:
 

@AllArgsConstructor
public class Student {private String id;private String name;
}

生成的全参构造函数可近似看于:

public Student(String id, String name) {this.id = id;this.name= name;
}

部分参数构造函数
@RequiredArgsConstructor注解可用于生成包含特定final或@NonNull修饰属性的构造函数,例如:
 

@RequiredArgsConstructor
public class student{@NonNullprivate String name;private int age;
}

会生成如下构造函数:
 

 public student(@NonNull String name) {this.name = name;
}


3.equals 和 hashCode 方法生成

@EqualsAndHashCode注解来自动生成哈希和equals方法,例如:

@EqualsAndHashCode
public class student {private String name;private int  age;
}


4.toString方法生成

@ToString  注解可用于自动生成对象的  toString方法,例如:

@ToString
public class student {private String name;private int age;private double grade;
}

 toString方法会以一种清晰的格式输出对象的属性信息,方便调试和日志记录。

4.@Data

使用@Data注解等同于添加@Getter、@Setter、@ToString、@EqualsAndHashCode和合适的构造函数(无参构造函数和全参构造函数),例如:
 

@Data
public class student {private int age;private String name;
}


 5.日志

Lombok 提供了方便的日志注解,如@Slf4j 、@Log 等,在类中添加该注解后,Lombok 会自动为类添加一个org.slf4j.Logger类型的日志对象,例如:

@Slf4j
public class Mytext {public void logtext() {log.info("666");// 业务逻辑代码log.info("777");}
}


这样就无需手动创建和初始化日志对象,简化了日志记录的代码编写。
 

6.Lombok在实际项目中的应用场景
 

数据传输对象(DTO)
 
在企业级应用开发中,经常需要在不同层之间传递数据,数据传输对象(DTO)主要用于存储和传输数据,其内部大多是属性和对应的 Getter、Setter 方法,使用 Lombok 的@Data注解可以快速创建 DTO 类,提高开发效率。
 
 
领域模型(Domain Model)
 
领域模型是业务逻辑的核心体现,通常包含丰富的业务属性和关联关系。Lombok 可以简化领域模型类的代码编写,例如自动生成构造函数、Getter 和 Setter 方法等,使开发者能够更专注于业务规则的定义和实现。如:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Order {private String orderId;private Customer customer;// 其他业务方法
}


 Lombok 的日志注解使得在各个类中添加日志功能变得极为简单,无论是记录系统运行状态、调试信息还是错误信息,都可以方便地使用 Lombok 提供的日志功能,例如:


@Slf4j
@RestController
public class textController {@GetMapping("/text/{id}")public Product gettextById(@PathVariable String id) {log.info("当前的产品是: {}", id);// 根据 id 查询产品并返回return textService.gettextById(id);}
}

Lombok 是在编译阶段起作用的工具,当 Java 源代码被编译时,Lombok 插件会解析源代码中的注解信息。对于带有 Lombok 注解的类,它会根据注解的定义生成相应的字节码。


7.结论


Lombok通过注解自动生成常用的代码结构,在数据传输对象、领域模型、日志记录等众多应用场景中都有着广泛的应用。在团队开发中,要确保团队成员对 Lombok 的使用规范和注意事项有清晰的认识,并且要保证开发环境(包括 IDE 版本、其他工具和框架的兼容性等)能够支持 Lombok 的运行,这样才能充分发挥 Lombok 的优势,提升 Java 项目的开发质量和效率。

http://www.lryc.cn/news/493389.html

相关文章:

  • AIGC引领金融大模型革命:未来已来
  • DBA面试题-1
  • 用go语言写一个小服务
  • 亚马逊开发视频人工智能模型,The Information 报道
  • WordCloud参数的用法:
  • qml调用c++类内函数的三种方法
  • NLP任务四大范式的进阶历程:从传统TF-IDF到Prompt-Tuning(提示词微调)
  • GAMES101:现代计算机图形学入门-笔记-09
  • 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  • MySQL聚合查询分组查询联合查询
  • 告别照相馆!使用AI证件照工具HivisionIDPhotos打造在线证件照制作软件
  • 通信原理第三次实验
  • 【halcon】Metrology工具系列之 get_metrology_object_result_contour
  • A052-基于SpringBoot的酒店管理系统
  • NLP信息抽取大总结:三大任务(带Prompt模板)
  • python常见问题-pycharm无法导入三方库
  • 迅为RK3588开发板Android系统开发笔记-使用ADB工具
  • 什么是分布式数据库?
  • Leetcode 3363. Find the Maximum Number of Fruits Collected
  • 【数据仓库 | Data Warehouse】数据仓库的四大特性
  • springboot配置多数据源mysql+TDengine保姆级教程
  • dns实验2:反向解析
  • ZooKeeper 基础知识总结
  • npm库xss依赖的使用方法和vue3 中Web富文本编辑器 wangeditor 使用xss库解决 XSS 攻击的方法
  • 微信小程序蓝牙writeBLECharacteristicValue写入数据返回成功后,实际硬件内信息查询未存储?
  • 5G NR:带宽与采样率的计算
  • go 和java 编写方式的理解
  • C# 7.1 .Net Framwork4.7 VS2017环境下,方法的引用与调用
  • etcd、kube-apiserver、kube-controller-manager和kube-scheduler有什么区别
  • 每日一题 LCR 057. 存在重复元素 III