@RequiredArgsConstructor详解

@RequiredArgsConstructor详解

一、什么是@RequiredArgsConstructor?

@RequiredArgsConstructor是Lombok的一个注解,简化了我们对@Autowired书写,我们在写Controller层或者Service层的时候,总是需要注入很多mapper接口或者service接口,如果每个接口都写上@Autowired,这样看起来就会很繁琐,@RequiredArgsConstructor注解可以代替@Autowired注解

二、@RequiredArgsConstructor怎么使用?

2.1、导包

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version>
</dependency>

2.2、使用

将@RequiredArgsConstructor写在类上面

image-20240727000813938

注意点

1、声明的变量必须加上final修饰

2、基于构造方法为属性赋值,容器通过调用类的构造方法将其进行依赖注入

三、@AllArgsConstructor和@RequiredArgsConstructor区别

1、@AllArgsConstructor 生成一个包含所有字段的构造方法,如果使用了@Value注入,@Value注入会失效,原因是因为@Value注解是通过对象的set方法赋值的,构造方法的执行还在set方法之前,所以在构造方法中使用变量会变量为null。
2、@RequiredArgsConstructor会将类的每一个final字段或者non-null字段生成一个构造方法
总结:@AllArgsConstructor和@RequiredArgsConstructor都可以用来替代@Autowired写法,区别在于@RequiredArgsConstructor必须要有final修饰,如果有@Value注解,@RequiredArgsConstructor修饰可以成功注入,@AllArgsConstructor修饰会注入失败

四、@NoArgsConstructor、@RequiredArgsConstructor和@AllArgsConstructor

1、@NoArgsConstructor

@NoArgsConstructor将生成一个没有参数的构造函数。如果这是不可能的(因为最终字段),将导致编译器错误,除非@NoArgsConstructor(force = true)使用,然后使用0/ false/ 初始化所有最终字段null。对于具有约束的字段(如@NonNull字段),不会生成任何检查,因此请注意,在稍后正确初始化这些字段之前,通常不会满足这些约束。某些java构造(例如hibernate和Service Provider Interface)需要no-args构造函数。此注释主要与@Data生成注释的其他构造函数之一或其中一个结合使用。

2、@RequiredArgsConstructor

@RequiredArgsConstructor为每个需要特殊处理的字段生成一个带有1个参数的构造函数。所有未初始化的final字段都会获得一个参数,以及标记为@NonNull在声明它们的位置未初始化的任何字段。对于标记有的字段@NonNull,还会生成显式空检查。构造函数将抛出一个NullPointerExceptionif用于标记为@NonNullcontains 的字段的任何参数null。参数的顺序与字段在类中的显示顺序相匹配。

3、@AllArgsConstructor

@AllArgsConstructor为类中的每个字段生成一个带有1个参数的构造函数。标记为@NonNull结果的字段将检查这些参数。

4、总结

	这些注释中的每一个都允许使用替代形式,其中生成的构造函数始终是私有的,并且生成包围私有构造函数的附加静态工厂方法。通过提供staticName注释的值来启用此模式,如下所示:@RequiredArgsConstructor(staticName="of")。与普通构造函数不同,这种静态工厂方法将推断泛型。这意味着您的API用户可以写入MapEntry.of("foo", 5)而不是更长时间new MapEntry<String, Integer>("foo", 5)。要在生成的构造函数上添加注释,可以使用onConstructor=@__({@AnnotationsHere}),但要小心; 这是一个实验性功能。有关更多详细信息,请参阅有关onX功能的文档。这些注释会跳过静态字段。与大多数其他lombok注释不同,显式构造函数的存在不会阻止这些注释生成自己的构造函数。这意味着您可以编写自己的专用构造函数,并让lombok生成样板文件。如果出现冲突(您的一个构造函数最终使用与lombok生成的签名相同的签名),则会发生编译器错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-----栈

目录 1.栈&#xff08;Stack&#xff09; 1.1概念 1.2栈的使用 1.3栈的模拟实现 1.4栈的应用场景 1.5栈、虚拟机栈、栈帧有什么区别呢 1.栈&#xff08;Stack&#xff09; 1.1概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操…

【Python】基础学习技能提升代码样例4:常见配置文件和数据文件读写ini、yaml、csv、excel、xml、json

一、 配置文件 1.1 ini 官方-configparser config.ini文件如下&#xff1a; [url] ; section名称baidu https://www.zalou.cnport 80[email]sender ‘xxxqq.com’import configparser # 读取 file config.ini # 创建配置文件对象 con configparser.ConfigParser() # 读…

EEtrade:区块链是什么

区块链&#xff0c;这个近年来频繁出现在我们视野中的术语&#xff0c;已经从一个技术小众圈的词汇&#xff0c;逐渐演变为全球关注的焦点。从比特币的诞生&#xff0c;到如今在金融、供应链、物联网等领域的广泛应用&#xff0c;区块链技术正在深刻地改变着我们的生活。那么&a…

我在高职教STM32——串口通信(5)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思的教学设计分享…

深入解析 Java 的 switch 语句

深入解析 Java 的 switch 语句 在 Java 编程中&#xff0c;switch 语句是一种常用的控制流语句&#xff0c;它能够根据变量的不同值执行不同的代码块。与 if-else 语句相比&#xff0c;switch 语句在处理多个条件判断时更加简洁和清晰&#xff0c;尤其适用于对一个变量的多个可…

Godot入门 01Godot介绍

Unity大神&#xff0c;YouTube百万游戏开发者的启蒙老师&#xff0c;Brackeys&#xff0c;携 Godot 新手教程&#xff0c;正式回归。 转自&#xff1a;https://youtu.be/LOhfqjmasi0?si4RguI6-pXHZ2mk9K 资产&#xff1a;https://brackeysgames.itch.io/brackeys-platformer-b…

病理多示例学习仓库介绍(持续更新中)

开源项目介绍&#xff1a;MIL_BASELINE 项目概览 MIL_BASELINE 是一个集成了多种多实例学习方法&#xff08;MIL&#xff09;的统一框架库&#xff0c;旨在简化多实例学习模型的开发与应用。它不仅整合了多种MIL方法&#xff0c;还提供了统一的数据集接口和常用的数据集划分方…

C++的编译方式和文件扩展名,C++的头文件,以及C++的标准输入和输出

本文介绍C++的编译方式和文件扩展名,C++的头文件,以及C++的标准输入和输出 1.编译方式和文件扩展名 2.头文件 3.标准输入输出 //vi 01first.cpp#include <iostream>int main(void) {std::cout<<"hello world"<<std::endl;return 0;}1.1编译方式…

【linux】Shell脚本三剑客之grep和egrep命令的详细用法攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

LK漏感值在网络变压器测试中是否有很大的作用?

今天客户一个产品异常问题&#xff0c;就是说LK漏感值严重超标产品规格书参数&#xff0c;今天我们讲讲这个参数在网络变压器其中的影响。LK漏感值在网络变压器的测试和性能评估中扮演着重要的角色。漏感&#xff0c;或称为漏磁场感抗&#xff0c;是指变压器中不参与主要能量传…

2024.7.24

预处理 在计算机编程和算法设计中&#xff0c;“预处理”通常指在正式的处理或计算之前&#xff0c;对数据或操作进行的一些预先的处理和准备工作。 目的 预处理的目的通常包括&#xff1a; 优化性能&#xff1a;通过提前计算或整理一些数据&#xff0c;减少后续主要计算过…

万字长文说说C#和Rust_Cangjie们的模式匹配

C#11新增列表模式后&#xff0c;这个从C#6就开始的特性&#xff0c;算是拼接好了模式匹配的最后一块拼图。对比Swift、Rust或Cangjie这类先天支持模式匹配的语言&#xff0c;能否一战&#xff1f;今天就来全面battle一下。Swift、Rust和Cangjie的模式匹配&#xff0c;一肪相承&…

springboot会员信息管理系统-计算机毕业设计源码38258

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3开发技术 1.3.1 Spring Boot框架 1.3.2 Java语言 1.3.3 MySQL数据库 1.4论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 登录流程 2.2.2数据删除流程 2.3 系统功能分析 2.4 系统用例分析…

代码审计:Bluecms v1.6

代码审计&#xff1a;Bluecms v1.6 漏洞列表如下(共计32个漏洞&#xff0c;附Exp&#xff0c;按时间顺序)&#xff1a; 未完待续… 1、user.php 766行处存在任意文件删除漏洞 Exp:http://127.0.0.3/bluecms/user.php?actedit_user_info Post&#xff1a;face_pic32.php el…

动静资源的转发操作

目录 Nginx中的location指令 静态资源的转发 动态资源的转发 注意事项 深入研究 如何在Nginx中实现对特定后缀文件的静态资源进行反向代理&#xff1f; Nginx中location指令的优先级是怎样确定的&#xff1f; 为什么在使用proxy_pass时要区分是否带有斜杠&#xff1f; N…

《Java初阶数据结构》----8.<java对象的比较总结>

目录 前言 一、Java对象的比较 1.1基本类型的比较 1.2 对象比较的问题&#xff08;与equals&#xff09; 1.3对象的比较 &#xff08;三种常用方式&#xff09; 1.重写equals方法 2.基于Comparble接口类的比较 3.基于比较器比较&#xff08;Comparator接口&#xff09; …

秒懂C++之string类(下)

目录 一.接口说明 1.1 erase 1.2 replace&#xff08;最好别用&#xff09; 1.3 find 1.4 substr 1.5 rfind 1.6 find_first_of 1.7 find_last_of 二.string类的模拟实现 2.1 构造 2.2 无参构造 2.3 析构 2.4.【】运算符 2.5 迭代器 2.6 打印 2.7 reserve扩容 …

大模型算法面试题(十二)

本系列收纳各种大模型面试题及答案。 1、领域模型Continue PreTrain数据如何选取 在领域模型的Continue PreTrain&#xff08;持续预训练&#xff09;过程中&#xff0c;数据选取是一个至关重要的步骤&#xff0c;它直接影响模型在特定领域上的性能和泛化能力。以下是一些关于…

react native FlatList 组件滚动问题

版本"react-native": "0.74.2", <FlatListstyle{{width: 100%}}ref{flatListRef}data{list}renderItem{chatItem}keyExtractor{item > item.id}// onScroll{handleScroll}onContentSizeChange{() > {// 内容大小变化时&#xff0c;如果未手动滚动…

JavaScript在现代Web开发中的高级特性与趋势

介绍随着Web技术的飞速发展&#xff0c;JavaScript的角色日益重要&#xff0c;不仅限于前端逻辑处理&#xff0c;还涉及到后端服务、移动应用等多个领域。阐述掌握JavaScript高级特性对于开发高性能、可扩展Web应用的重要性。 1. ES6新特性概览 箭头函数&#xff1a;更简洁的…