💡 一则也许对你有用的小广告 🏆

欢迎飞飞程序员   ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 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:自定义建造者的构造逻辑。
  • @Builder.Default:为字段设置默认值。

    @Builder
    public class User {
        @Builder.Default
        private String role = "user";
    }
    

组合使用示例

@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Product {
    private Long id;
    private String name;
    @Builder.Default
    private double price = 0.0;
}
  • 支持所有构造方式

    Product p1 = new Product();                      // 无参构造
    Product p2 = new Product(1L, "Laptop", 999.9);  // 全参构造
    Product p3 = Product.builder().name("Phone").build(); // 建造者模式
    

在Spring Boot中的常见用途

  1. JPA实体类

    @Entity
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public class Employee {
        @Id @GeneratedValue
        private Long id;
        private String name;
    }
    
  2. DTO对象

    用于接收前端请求或返回响应时,简化对象的创建和转换。

  3. 测试代码

    使用@Builder快速构造测试数据。


注意事项

  1. Lombok依赖

    确保项目中已引入Lombok依赖(Maven/Gradle配置)并安装IDE插件。

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    
  2. 不可变对象

    若需要不可变对象,可将字段设为final并只保留@AllArgsConstructor

  3. @Data的区别

    @Data包含@RequiredArgsConstructor(仅对final/@NonNull字段生成构造方法),而非全参构造。

通过合理使用这些注解,可以显著减少样板代码,提高开发效率。

上一篇 vue3中动态路由参数和查询参数的获取方法
下一篇 vue3生成二维码的组件 qrcode的详细用法

全部评论(0)

头像
😃 😁 😅 😂 😍 😜 😝 🤑 🥵 🥰 😙 😎 😵 😭 😱 😖 🥳 👽 🙈 🤡 😤 💣 💯 💢 ❤️ 👍 👏 👋 👌 🤏 🙏
还没有任何评论哟~