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

lombok插件@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor的区别

准备

在使用lombok插件前需要先引入maven依赖

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

区别

@NoArgsConstructor:生成无参的构造方法。
@AllArgsConstructor:生成该类下全部属性的构造方法。
@RequiredArgsConstructor:生成该类下被final修饰或者non-null字段生成一个构造方法。
场景:
在springboot中,对于一个bean类,注入其他bean的时候,常见的是使用@Autowired,实际上也可以使用构造函数注入,这个时候就可以使用@AllArgsConstructor或者@RequiredArgsConstructor来代替。

@NoArgsConstructor

用于生成无参的构造方法。

举例

添加一个实体类,在类中加上 @NoArgsConstructor注解

package com.model;import lombok.NoArgsConstructor;@NoArgsConstructor
public class IndexModel {private String user;private Integer age;
}

生成后的class文件反编译后会有一个无参的构造函数

package com.model;public class IndexModel {private String user;private Integer age;public IndexModel() {}
}

@AllArgsConstructor

生成该类下全部属性的构造方法。

举例

同样的实体类,加上@AllArgsConstructor注解

package com.model;import lombok.AllArgsConstructor;@AllArgsConstructor
public class IndexModel {private String user;private Integer age;
}

生成后的class文件反编译后内容如下,可以看到该类下所有属性都添加到了构造函数的参数种

package com.model;public class IndexModel {private String user;private Integer age;public IndexModel(final String user, final Integer age) {this.user = user;this.age = age;}
}

@RequiredArgsConstructor

生成该类下被final关键字修饰或者带有@NotNull注解的属性生成一个构造方法
#####举例
添加三个属性,一个普通属性,一个带有@NotNull注解的属性,另一个带有final关键字的属性

package com.model;import lombok.RequiredArgsConstructor;
import com.sun.istack.internal.NotNull;@RequiredArgsConstructor
public class IndexModel {private String user;@NotNullprivate Integer age;private final String email;
}

生成后的class如下,可以发现,只生成了ageemail属性的构造参数,user属性并未生成

package com.model;import com.sun.istack.internal.NotNull;public class IndexModel {private String user;@NotNullprivate Integer age;private final String email;public IndexModel(final Integer age, final String email) {if (age == null) {throw new NullPointerException("age is marked non-null but is null");} else {this.age = age;this.email = email;}}
}

替代 @Autowired 注解

实际开发中很多小伙伴一般会写成这种形式,使用@Autowired注解进行注入

@RestController
@RequestMapping("api")
public class DemoController {@Autowiredprivate BlogService service;
}

用上Lombok后,我们有更简约的写法,那就是在DemoController上增加注解@AllArgsConstructor

@RestController
@RequestMapping("api")
@AllArgsConstructor
public class DemoController {private BlogService service;}

注入多个对象

@Component
@AllArgsConstructor
public class ConstructorDemo {// 注入三个bean对象,完全没有使用Autowired注解private BeanTest1 beanTest1;@NonNullprivate BeanTest2 beanTest2;private final BeanTest3 beanTest3;
}

是不是看起来更简洁了呢?

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

相关文章:

  • 金融科技中的跨境支付、Open API、数字产品服务开发、变革管理
  • 2025C卷 - 华为OD机试七日集训第1期 - 按算法分类,由易到难,循序渐进,玩转OD
  • SpringSecurity实战:核心配置技巧
  • 由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程
  • Python堆栈实现:从基础到高并发系统的核心技术
  • 模拟实现python的sklearn库中的Bunch类以及 load_iris 功能
  • 20250727让飞凌OK3576-C开发板在Rockchip的原厂Android14下通过耳机播音
  • 两个函数的卷积
  • Node.js特训专栏-配置与环境部署:20.PM2进程守护与负载均衡
  • 以使命为帆,结业是重新出发的号角
  • 电科金仓 KingbaseES 深度解码:技术突破・行业实践・沙龙邀约 -- 融合数据库的变革之力
  • 从0开始学linux韦东山教程Linux驱动入门实验班(6)
  • c# everthing.exe 通信
  • Android基础(一) 运行HelloWorld
  • 【java】 IntelliJ IDEA高效编程设置指南
  • 大模型算法面试笔记——常用优化器SGD,Momentum,Adagrad,RMSProp,Adam
  • Java 代理机制详解:从静态代理到动态代理,彻底掌握代理模式的原理与实战
  • 雪花算法原理深度解析
  • 【0基础PS】PS工具详解--选择工具--快速选择工具
  • 【n8n教程笔记——工作流Workflow】文本课程(第一阶段)——5.4 计算预订订单数量和总金额 (Calculating booked orders)
  • 使用Python,OpenCV,K-Means聚类查找图像中最主要的颜色
  • Unity Catalog与Apache Iceberg如何重塑Data+AI时代的企业数据架构
  • 【LeetCode 热题 100】35. 搜索插入位置——二分查找(左闭右开)
  • 高格办公空间:以 “空间为基,服务为翼”,重塑办公场景生态
  • 【语义分割】记录2:yolo系列
  • libomxil-bellagio移植到OpenHarmony
  • java小白闯关记第一天(两个数相加)
  • Python-初学openCV——图像预处理(三)
  • XSS利用
  • Web-Machine-N7靶机攻略