博客
关于我
99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏!!!
阅读量:453 次
发布时间:2019-03-06

本文共 1943 字,大约阅读时间需要 6 分钟。

Lombok深入解析:从原理到实践

简介

Lombok是一个强大的Java代码生成工具,通过注解简化常见任务,如Setter/Getter、ToString、Equals/HashCode等操作。它的核心思想是减少重复代码,提升开发效率。本文将从Lombok的实现原理入手,探讨其优缺点,并手撸一个简易版的Lombok,帮助理解其背后的逻辑。


Lombok的使用

1. 安装Lombok插件

在IDE中安装Lombok插件是开始使用的第一步。以IntelliJ IDEA为例:

  • 进入File > Settings > Plugins。2.搜索并安装Lombok插件。3.重启IDE,插件即可正常使用。
  • 2. 添加Lombok依赖

    项目中添加Lombok依赖,方法有二:

    • Maven项目:在pom.xml中添加:
      org.projectlombok
      lombok
      1.18.12
      provided
    • JDK 9+:在模块依赖中添加注解处理路径:
      org.projectlombok
      lombok
      1.18.12
    3. 使用Lombok

    示例对比:

    • 无Lombok
      public class Person {  private Integer id;  private String name;  public Integer getId() { return id; }  public void setId(Integer id) { this.id = id; }  public String getName() { return name; }  public void setName(String name) { this.name = name; }}
    • 使用Lombok
      @Getter @Setterpublic class Person {  private Integer id;  private String name;}

    Lombok提供丰富的注解工具,涵盖:

    • @Getter/@Setter:自动生成字段的访问器。
    • @ToString:自动生成toString()方法。
    • @EqualsAndHashCode:自动生成equals()hashCode()方法。
    • @NoArgsConstructor@RequiredArgsConstructor@AllArgsConstructor:自动生成构造函数。
    • @Data:结合多个注解,简化POJO类。
    • @Value:为属性添加final声明。
    • @Builder:创建简洁的构建器。
    • @Log:集成日志记录工具。
    • @SneakyThrows:简化异常处理。
    • @Cleanup:自动管理资源。

    Lombok的原理

    Lombok通过注解处理器(JSR 269)在编译期生成代码。具体流程:

  • 解析与填充符号表:Java编译器解析源码,填充符号表。
  • 注解处理:Lombok注解处理器解析注解,生成相应的代码。
  • 字节码生成:将处理后的AST转换为最终的字节码。
  • 这使得Lombok能够在编译期动态修改AST,生成优雅的代码。


    手撸一个Lombok

    实现一个简易版的Lombok,支持自定义注解处理。步骤如下:

  • 定义自定义注解:创建MyGetter.java,定义一个注解接口。
  • 实现注解处理器:继承AbstractProcessor,实现process()方法,处理注解并生成代码。
  • 编译与测试:使用javac工具编译注解处理器,测试自定义注解的效果。

  • Lombok的优缺点

    优点:
    • 节省时间:减少重复代码,提高开发效率。
    • 代码简洁:让代码更优雅,更易阅读。
    • 降低门槛:对于简单的POJO类,避免手写基础方法。
    缺点:
    • 调试难度:生成代码不可见,影响调试。
    • 兼容性问题:依赖第三方项目,版本更新快,可能存在兼容性问题。
    • 侵入性强:代码结构受注解影响,可能导致理解困难。
    • 封装破坏:暴露过多字段,影响对私有字段的控制。

    小结

    Lombok通过注解处理器在编译期生成代码,极大简化了Java开发中的重复任务。它适合简化POJO类和常用操作,但在复杂场景中可能不适用。选择使用Lombok需权衡其优缺点,根据项目需求进行决定。

    转载地址:http://grgfz.baihongyu.com/

    你可能感兴趣的文章
    Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
    查看>>
    Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
    查看>>
    Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
    查看>>
    Mysql 学习总结(89)—— Mysql 库表容量统计
    查看>>
    mysql 实现主从复制/主从同步
    查看>>
    mysql 审核_审核MySQL数据库上的登录
    查看>>
    mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
    查看>>
    mysql 导入导出大文件
    查看>>
    mysql 将null转代为0
    查看>>
    mysql 常用
    查看>>
    MySQL 常用列类型
    查看>>
    mysql 常用命令
    查看>>
    Mysql 常见ALTER TABLE操作
    查看>>
    MySQL 常见的 9 种优化方法
    查看>>
    MySQL 常见的开放性问题
    查看>>
    Mysql 常见错误
    查看>>
    MYSQL 幻读(Phantom Problem)不可重复读
    查看>>
    mysql 往字段后面加字符串
    查看>>
    mysql 快速自增假数据, 新增假数据,mysql自增假数据
    查看>>
    Mysql 报错 Field 'id' doesn't have a default value
    查看>>