Lombok [Java库]

Marimo_z
2025-04-18 / 0 评论 / 2 阅读 / 正在检测是否收录...

一、安装与配置

1. 添加依赖

  • Maven 项目:在 pom.xml 中添加依赖:

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version> <!-- 使用最新版本 -->
        <scope>provided</scope>
    </dependency>

2. IDE 插件安装

  • IntelliJ IDEA:安装插件 Lombok,并启用注解处理:
    Settings > Build > Compiler > Annotation Processors > Enable annotation processing
  • Eclipse:下载 lombok.jar,运行安装并指定 Eclipse 路径。

二、常用注解详解

1. @Getter / @Setter

  • 作用:自动生成字段的 getter 和 setter 方法。
  • 示例

    @Getter @Setter
    public class User {
        private String name;
        private int age;
    }
  • 扩展:控制访问级别或排除字段:

    @Setter(AccessLevel.PROTECTED) // 设置 protected setter
    private String password;

2. @ToString

  • 作用:生成 toString() 方法。
  • 参数

    • exclude:排除字段。
    • callSuper:是否包含父类字段。
    @ToString(exclude = "password", callSuper = true)
    public class User extends BaseEntity { ... }

3. @EqualsAndHashCode

  • 作用:生成 equals()hashCode() 方法。
  • 注意:避免在 JPA 实体中使用默认实现(可能影响关联对象)。

4. 构造方法注解

  • @NoArgsConstructor:生成无参构造方法。
  • @AllArgsConstructor:生成全参构造方法。
  • @RequiredArgsConstructor:生成包含 final@NonNull 字段的构造方法。

    @RequiredArgsConstructor
    public class User {
        private final Long id;
        @NonNull private String name;
    }

5. @Data

  • 组合注解:包含 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor
  • 适用场景:简单 POJO 类。

    @Data
    public class Product {
        private Long id;
        private String name;
    }

6. @Builder

  • 作用:提供建造者模式支持。
  • 用法

    @Builder
    public class Order {
        private Long id;
        private String item;
    }
    // 使用示例
    Order order = Order.builder().id(1L).item("Book").build();
  • 继承处理:若父类需 Builder,使用 @SuperBuilder

7. @Slf4j

  • 作用:自动生成日志对象 log

    @Slf4j
    public class Service {
        public void process() {
            log.info("Processing...");
        }
    }

8. @Value

  • 作用:生成不可变类(所有字段为 final)。

    @Value
    public class ImmutablePoint {
        int x;
        int y;
    }

9. @NonNull

  • 作用:自动生成非空检查。

    public void setName(@NonNull String name) {
        this.name = name;
    }

10. @Cleanup

  • 作用:自动关闭资源(如 IO 流)。

    public void copyFile(String src, String dest) throws IOException {
        @Cleanup InputStream in = new FileInputStream(src);
        @Cleanup OutputStream out = new FileOutputStream(dest);
        // 自动调用 in.close() 和 out.close()
    }

三、高级配置

1. 全局配置(lombok.config)

  • 在项目根目录创建 lombok.config 文件,设置如:

    lombok.addLombokGeneratedAnnotation = true # 标记生成代码
    lombok.extern.findbugs.addSuppressFBWarnings = true

2. 自定义日志框架

  • 使用 @Log4j2@CommonsLog 等适配不同日志框架。

四、注意事项

  1. JPA 实体类:慎用 @Data@ToString,避免触发延迟加载异常。推荐手动实现 equals/hashCode 或排除关联字段。
  2. 继承问题:子类使用 @Builder 时需配合 @SuperBuilder
  3. 代码可读性:过度使用 Lombok 可能降低代码透明度,需团队共识。
  4. 版本兼容性:确保 Lombok 版本与 JDK 和 IDE 兼容(如 JDK 17+需 Lombok 1.18.24+)。
1

评论 (0)

取消