博客
关于我
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/

    你可能感兴趣的文章
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>
    MySQL8,体验不一样的安装方式!
    查看>>
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>
    Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
    查看>>
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 参数--lock-tables浅析
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump 导出数据库中每张表的前n条
    查看>>
    mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
    查看>>
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqldump实现数据备份及灾难恢复
    查看>>