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

Lombok

Lombok

Lombok 是一个 Java 库,通过注解自动生成样板代码(如 Getter/Setter、构造函数等),从而简化开发。在你提供的代码中,@AllArgsConstructor 就是一个 Lombok 注解。以下是 Lombok 常用注解及其作用的详细说明:


1. @AllArgsConstructor

作用

自动生成一个包含所有字段的全参构造函数

示例
@AllArgsConstructor
public class User {private String name;private int age;
}

等价于:

public class User {private String name;private int age;
​public User(String name, int age) {this.name = name;this.age = age;}
}
在拦截器中的使用
@AllArgsConstructor
private static class ZhipuHeaderInterceptor implements Interceptor {final String apiKey;  // 自动生成构造函数 ZhipuHeaderInterceptor(String apiKey)
}

2. 其他常用 Lombok 注解

(1) @NoArgsConstructor

生成一个无参构造函数

@NoArgsConstructor
public class User {private String name;
}

等价于:

public class User {private String name;public User() {}
}
(2) @RequiredArgsConstructor

生成一个包含所有 final@NonNull 字段的构造函数。

@RequiredArgsConstructor
public class User {private final String name;private int age;  // 非 final,不会包含在构造函数中
}

等价于:

public class User {private final String name;private int age;
​public User(String name) {this.name = name;}
}
(3) @Getter / @Setter

自动生成字段的 Getter 和 Setter 方法。

@Getter
@Setter
public class User {private String name;
}

等价于:

public class User {private String name;public String getName() { return name; }public void setName(String name) { this.name = name; }
}
(4) @Data

组合注解,包含 @Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor

@Data
public class User {private String name;private int age;
}
(5) @Builder

提供链式调用的构造器模式。

@Builder
public class User {private String name;private int age;
}// 使用
User user = User.builder().name("Alice").age(25).build();

3. 为什么在拦截器中使用 @AllArgsConstructor

在你的 ZhipuHeaderInterceptor 中:

  1. 字段是 final final String apiKey 需要在构造时初始化,使用 @AllArgsConstructor 可以自动生成构造函数,避免手动编写。

  2. 简化代码 拦截器通常只需依赖注入少量字段(如 apiKey),Lombok 让代码更简洁。


4. 使用 Lombok 的注意事项

  1. IDE 需要安装插件 IntelliJ IDEA/Eclipse 需安装 Lombok 插件,否则会报编译错误。

  2. 项目依赖 在 Maven/Gradle 中引入 Lombok 依赖:

    <!-- Maven -->
    <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope>
    </dependency>
  3. 谨慎使用 @Data 如果类需要继承或有特殊逻辑,@Data 可能生成不期望的 equals()/hashCode() 方法。


5. 完整拦截器代码对比(有无 Lombok)

使用 Lombok
@AllArgsConstructor
private static class ZhipuHeaderInterceptor implements Interceptor {final String apiKey;// 无需手动写构造函数
}
未使用 Lombok
private static class ZhipuHeaderInterceptor implements Interceptor {final String apiKey;public ZhipuHeaderInterceptor(String apiKey) {this.apiKey = apiKey;}
}

总结

  • @AllArgsConstructor 是 Lombok 提供的便捷注解,用于自动生成全参构造函数。

  • 在拦截器等需要依赖注入的场景中,Lombok 能显著减少样板代码。

  • 结合其他注解(如 @Getter@Builder),可以进一步简化 Java 开发。Lombok 是一个 Java 库,通过注解自动生成样板代码(如 Getter/Setter、构造函数等),从而简化开发。在你提供的代码中,@AllArgsConstructor 就是一个 Lombok 注解。以下是 Lombok 常用注解及其作用的详细说明:


    1. @AllArgsConstructor

    作用

    自动生成一个包含所有字段的全参构造函数

    示例
    @AllArgsConstructor
    public class User {private String name;private int age;
    }

    等价于:

    public class User {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}
    }
    在拦截器中的使用
    @AllArgsConstructor
    private static class ZhipuHeaderInterceptor implements Interceptor {final String apiKey;  // 自动生成构造函数 ZhipuHeaderInterceptor(String apiKey)
    }

    2. 其他常用 Lombok 注解

    (1) @NoArgsConstructor

    生成一个无参构造函数

    @NoArgsConstructor
    public class User {private String name;
    }

    等价于:

    public class User {private String name;public User() {}
    }
    (2) @RequiredArgsConstructor

    生成一个包含所有 final@NonNull 字段的构造函数。

    @RequiredArgsConstructor
    public class User {private final String name;private int age;  // 非 final,不会包含在构造函数中
    }

    等价于:

    public class User {private final String name;private int age;public User(String name) {this.name = name;}
    }
    (3) @Getter / @Setter

    自动生成字段的 Getter 和 Setter 方法。

    @Getter
    @Setter
    public class User {private String name;
    }

    等价于:

    public class User {private String name;public String getName() { return name; }public void setName(String name) { this.name = name; }
    }
    (4) @Data

    组合注解,包含 @Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor

    @Data
    public class User {private String name;private int age;
    }
    (5) @Builder

    提供链式调用的构造器模式。

    @Builder
    public class User {private String name;private int age;
    }// 使用
    User user = User.builder().name("Alice").age(25).build();

    3. 为什么在拦截器中使用 @AllArgsConstructor

    在你的 ZhipuHeaderInterceptor 中:

    1. 字段是 final final String apiKey 需要在构造时初始化,使用 @AllArgsConstructor 可以自动生成构造函数,避免手动编写。

    2. 简化代码 拦截器通常只需依赖注入少量字段(如 apiKey),Lombok 让代码更简洁。


    4. 使用 Lombok 的注意事项

    1. IDE 需要安装插件 IntelliJ IDEA/Eclipse 需安装 Lombok 插件,否则会报编译错误。

    2. 项目依赖 在 Maven/Gradle 中引入 Lombok 依赖:

      <!-- Maven -->
      <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope>
      </dependency>
    3. 谨慎使用 @Data 如果类需要继承或有特殊逻辑,@Data 可能生成不期望的 equals()/hashCode() 方法。


    5. 完整拦截器代码对比(有无 Lombok)

    使用 Lombok
    @AllArgsConstructor
    private static class ZhipuHeaderInterceptor implements Interceptor {final String apiKey;// 无需手动写构造函数
    }
    未使用 Lombok
    private static class ZhipuHeaderInterceptor implements Interceptor {final String apiKey;public ZhipuHeaderInterceptor(String apiKey) {this.apiKey = apiKey;}
    }

    总结

    • @AllArgsConstructor 是 Lombok 提供的便捷注解,用于自动生成全参构造函数。

    • 在拦截器等需要依赖注入的场景中,Lombok 能显著减少样板代码。

    • 结合其他注解(如 @Getter@Builder),可以进一步简化 Java 开发。

http://www.xdnf.cn/news/7281.html

相关文章:

  • Docker 核心原理详解:Namespaces 与 Cgroups 如何实现资源隔离与限制
  • Better Faster Large Language Models via Multi-token Prediction 原理
  • Linux多进程 写时拷贝 物理地址和逻辑地址
  • 在嵌入式系统中, 一般链路层断开多久,断开TCP为好
  • GitHub排名第一的开源ERP项目:Odoo生产计划与执行的功能概述
  • 安装Anaconda后无jupyter解决方法
  • 【NLP】35. 构建高质量标注数据
  • HTTP 协议基础
  • DAY27
  • 【C语言基础语法入门】通过简单实例快速掌握C语言核心概念
  • Golang的Web应用架构设计
  • Python爬虫实战:获取国家统计网最新消费数据并分析,为从业者做参考
  • Profinet转Ethernet IP主站网关:点燃氢醌生产线的智慧之光!
  • 【技术追踪】心脏生理学知识驱动的扩散模型用于无对比剂心肌梗死增强(MICCAI-2024)
  • 云原生安全:错误策略S3存储桶ACL设置为Everyone:FullControl
  • 智能投影仪行业2025数据分析报告
  • 【RAG 系统高效召回1】评估指标
  • 每日Prompt:自拍生成摇头娃娃
  • 【Unity】Unity中将字典序列化
  • 为什么上传大量大文件推荐是使用 app 应用为不是 web 浏览器下载上传呢?
  • Java合并两个列表到目标列表,并且进行排序
  • 解决使用@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss“, timezone = “GMT+8“)时区转换无效的问题
  • leetcode3371. 识别数组中的最大异常值-medium
  • 软件架构之-论高并发下的可用性技术
  • 团队氛围紧张,如何提升工作积极性?
  • 交叉引用、多个参考文献插入、跨文献插入word/wps中之【插入[1-3]、连续文献】
  • 多类别异常检测新SOTA-MVMCAD
  • 中国城市间交通驾车距离矩阵(2024)
  • 人工智能、机器学习与深度学习:概念解析与内在联系
  • tcp/ip协议