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
中:
-
字段是
final
的final String apiKey
需要在构造时初始化,使用@AllArgsConstructor
可以自动生成构造函数,避免手动编写。 -
简化代码 拦截器通常只需依赖注入少量字段(如
apiKey
),Lombok 让代码更简洁。
4. 使用 Lombok 的注意事项
-
IDE 需要安装插件 IntelliJ IDEA/Eclipse 需安装 Lombok 插件,否则会报编译错误。
-
项目依赖 在 Maven/Gradle 中引入 Lombok 依赖:
<!-- Maven --> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope> </dependency>
-
谨慎使用
@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
中:-
字段是
final
的final String apiKey
需要在构造时初始化,使用@AllArgsConstructor
可以自动生成构造函数,避免手动编写。 -
简化代码 拦截器通常只需依赖注入少量字段(如
apiKey
),Lombok 让代码更简洁。
4. 使用 Lombok 的注意事项
-
IDE 需要安装插件 IntelliJ IDEA/Eclipse 需安装 Lombok 插件,否则会报编译错误。
-
项目依赖 在 Maven/Gradle 中引入 Lombok 依赖:
<!-- Maven --> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope> </dependency>
-
谨慎使用
@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 开发。
-