一、背景
加了不下50個開發羣,常常聽大佬公司不允許lombok
,lombok
一人使用其他人都必須使用,如果僅僅是安裝一個插件,比起vscode
一堆插件,其實也不算什麼,lombok
好不好用,坑過才知道
類似的組件:
- Google Auto
- 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>inf[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常見坑
- 在
extends
父類如果有成員變量,如果使用@Data
那麼toString
和hashCode
和equals
都會出現問題,需要
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
好在阿里的代碼檢查插件和sonarlint可以檢測出來,所以不成問題
- 在
lombok
版本過舊,在IDEA2021.2.2
中,lombok
插件沒有更新版本,lombok
無法正常使用
解決方法是修改安裝的支持IDEA版本號,傳送門
-
``@Accessors
註解在某些
BeanCopy`工具類中無法使用,根本原因是Setter方法返回了原對象,而工具類判斷了返回值是否爲void -
強依賴
lombok
插件,這是老生常談了,一人使用lombok
所有人都必須安裝,就跟一人使用springboot所有人都必須使用,這個的關鍵是項目的committer
非常多,比如spring
這種開發者衆多的,但在微服務裏一個項目的裏的代碼量是沒有那麼多,維護者也是幾個人,影響的範圍也只是在項目維度,故應該具體情況具體分析,大型衆多人合作型項目應該避免強依賴 。如果實在想用呢?別怕
delombok
瞭解下,項目提交時就生成代碼,去掉lombok
註解,不需要lombok
插件
2.3 lombok的優勢
- 代碼簡化,比如builder建造者模式,是不是沒有bean對象都要構造一個呢?又或者鏈式表達式的返回對象都需要IDEA的代碼生成器再改造一下?
- 生成的代碼都是規範標準代碼,不需要
CodeReview
,這個怎麼理解呢,比如如果按照code review標準,是不是應該所有的get、set、toString、hashCode、equals方法都需要審覈 - 自定義註解。通過擴展第二點,我們根據公司的開發規範,構造滿足自己公司代碼生成器
- 可讀性,目前並未遇到可讀性問題。一些場景使用字節碼agent、AOP的可讀性也沒影響到開發者使用,最新JDK14內置record關鍵字也支持自動生成代碼。