当前位置: 首页 > 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.dtcms.com/a/301518.html

相关文章:

  • RS485 半双工系统中 DE 控制端默认 0 的技术原理与工程实践
  • (实用教程)Linux操作系统(二)
  • 零基础 “入坑” Java--- 十五、字符串String
  • 【I】题目解析
  • Spring MVC设计精粹:源码级架构解析与实践指南
  • 发布 VS Code 扩展的流程:以颜色主题为例
  • Python学习-----1.认识Python
  • 墨者:X-Forwarded-For注入漏洞实战
  • 解决ubantu系统下matplotlib中文乱码问题
  • MySQL进阶学习与初阶复习第四天
  • 数据库连接操作详解:左连接、右连接、全连接与内连接
  • ABP VNext + Elastic APM:微服务性能监控
  • 【优选算法】BFS解决最短路问题(单源)
  • 初始Redis:概念、特性、使用场景、安装教程
  • 六、搭建springCloudAlibaba2021.1版本分布式微服务-admin监控中心
  • IPv6的多级地址层次的理解
  • 设计模式(五)创建型:原型模式详解
  • 【ELasticsearch】节点角色分离最佳实践
  • 【LeetCode 热题 100】35. 搜索插入位置——二分查找(左闭右开)
  • 剑指offer第2版:双指针+排序+分治+滑动窗口
  • Web开发系列-第0章 Web介绍
  • 面试题:Vue2 中 template 的解析过程详解
  • CentOS 镜像源配置与 EOL 后的应对策略
  • 修改docker容器内的时区为东八区
  • 字符串是数据结构还是数据类型?
  • 常见认证机制详解
  • 哈希表应用(map,set共同作用)
  • Dify 深度解析:开启 AI 应用开发的无限可能
  • VUE3(四)、组件通信
  • 1439-素数环2