💡 一则也许对你有用的小广告 🏆
欢迎飞飞程序员 ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论
- 正在进行中的项目:《FFBlog知识付费博客项目》 正在持续更新中,基于 Spring Boot 3.x + JDK 21...,[**点击查看**] ;
- 《从零开发:FFBlog知识付费博客项目(全栈开发)》 演示链接: https://ffblog.ffcxy.com/ ;
截止目前, 飞飞 正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, Ai系统, CMS系统,在线商城系统,等等 ,欢迎点击围观
在Spring Boot中,@AllArgsConstructor、@NoArgsConstructor 和 @Builder 是Lombok库提供的常用注解,用于简化Java类的代码编写。以下是它们的详细解释和用法:
1. @AllArgsConstructor
作用:自动生成一个包含所有字段的构造方法。
适用场景:需要快速创建包含所有字段的构造方法时(例如依赖注入、测试等)。
示例:
@AllArgsConstructor
public class User {
private String name;
private int age;
}
等效代码:
public User(String name, int age) {
this.name = name;
this.age = age;
}
注意:
- 如果类中有
final字段或@NonNull字段,生成的构造方法会包含这些字段的非空检查。
- 在Spring中,若需要依赖注入构造方法,通常需要显式使用
@Autowired(但Spring 4.3+后单个构造方法可省略)。
2. @NoArgsConstructor
作用:自动生成一个无参构造方法。
适用场景:
- JPA实体类默认需要无参构造方法。
- 某些框架(如Jackson、Hibernate)通过反射创建对象时依赖无参构造方法。
示例:
@NoArgsConstructor
public class User {
private String name;
private int age;
}
等效代码:
public User() {}
注意:
- 如果类中有
final字段,需配合@NoArgsConstructor(force = true),此时final字段会被初始化为null/0/false。
- 可结合
@AllArgsConstructor一起使用。
3. @Builder
作用:自动生成一个建造者模式的构造器,支持链式调用。
适用场景:
- 需要创建具有多个可选参数的复杂对象时(避免构造方法重载)。
- 提高代码可读性(尤其是参数较多时)。
示例:
@Builder
public class User {
private String name;
private int age;
}
使用方式:
User user = User.builder()
.name("Alice")
.age(25)
.build();
等效代码:
Lombok会生成一个内部静态类UserBuilder,包含与字段同名的方法和build()方法。
高级用法:
组合使用示例
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Product {
private Long id;
private String name;
@Builder.Default
private double price = 0.0;
}
在Spring Boot中的常见用途
JPA实体类:
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Employee {
@Id @GeneratedValue
private Long id;
private String name;
}
DTO对象:
用于接收前端请求或返回响应时,简化对象的创建和转换。
测试代码:
使用@Builder快速构造测试数据。
注意事项
Lombok依赖:
确保项目中已引入Lombok依赖(Maven/Gradle配置)并安装IDE插件。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
不可变对象:
若需要不可变对象,可将字段设为final并只保留@AllArgsConstructor。
与@Data的区别:
@Data包含@RequiredArgsConstructor(仅对final/@NonNull字段生成构造方法),而非全参构造。
通过合理使用这些注解,可以显著减少样板代码,提高开发效率。