使用Lombok利弊

一、背景

加了不下50個開發羣,常常聽大佬公司不允許lomboklombok一人使用其他人都必須使用,如果僅僅是安裝一個插件,比起vscode一堆插件,其實也不算什麼,lombok好不好用,坑過才知道

類似的組件:

  1. Google Auto
  2. Dagger

二、利弊

2.1 spring社區的態度

查看springboot2.5.5的bom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>2.5.5</version>
  <packaging>pom</packaging>
  <name>spring-boot-dependencies</name>
  <description>Spring Boot Dependencies</description>
  <url>https://spring.io/projects/spring-boot</url>
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0</url>
    </license>
  </licenses>
  <developers>
    <developer>
      <name>Pivotal</name>
      <email>[email protected]</email>
      <organization>Pivotal Software, Inc.</organization>
      <organizationUrl>https://www.spring.io</organizationUrl>
    </developer>
  </developers>
  <scm>
    <url>https://github.com/spring-projects/spring-boot</url>
  </scm>
  <properties>
     <lombok.version>1.18.20</lombok.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
</project>

查看 spring-data-redis:?.?.?

但是最新版2.5.5已經沒有@Data這個註解,應該是被修改了

2.2 lombok常見坑

  1. extends父類如果有成員變量,如果使用@Data那麼toStringhashCodeequals都會出現問題,需要
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

好在阿里的代碼檢查插件和sonarlint可以檢測出來,所以不成問題

  1. lombok版本過舊,在IDEA2021.2.2中,lombok插件沒有更新版本,lombok無法正常使用

解決方法是修改安裝的支持IDEA版本號,傳送門

  1. ``@Accessors註解在某些BeanCopy`工具類中無法使用,根本原因是Setter方法返回了原對象,而工具類判斷了返回值是否爲void

  2. 強依賴lombok插件,這是老生常談了,一人使用lombok所有人都必須安裝,就跟一人使用springboot所有人都必須使用,這個的關鍵是項目的committer非常多,比如spring這種開發者衆多的,但在微服務裏一個項目的裏的代碼量是沒有那麼多,維護者也是幾個人,影響的範圍也只是在項目維度,故應該具體情況具體分析,大型衆多人合作型項目應該避免強依賴 。

    如果實在想用呢?別怕delombok瞭解下,項目提交時就生成代碼,去掉lombok註解,不需要lombok插件

2.3 lombok的優勢

  1. 代碼簡化,比如builder建造者模式,是不是沒有bean對象都要構造一個呢?又或者鏈式表達式的返回對象都需要IDEA的代碼生成器再改造一下?
  2. 生成的代碼都是規範標準代碼,不需要CodeReview,這個怎麼理解呢,比如如果按照code review標準,是不是應該所有的get、set、toString、hashCode、equals方法都需要審覈
  3. 自定義註解。通過擴展第二點,我們根據公司的開發規範,構造滿足自己公司代碼生成器
  4. 可讀性,目前並未遇到可讀性問題。一些場景使用字節碼agent、AOP的可讀性也沒影響到開發者使用,最新JDK14內置record關鍵字也支持自動生成代碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章