文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

Lombok在Java生态圈并不是个新事物,但是我承认我一直打心底低估其实际价值,直到我真正尝试或者说被“说服”尝试了之后了才改变这种想法。以前我并不认为增加一个能够产生任何现代IDE都能轻易产生的代码的类库有什么大的价值。因此我会忽略它,并且一直在写或者生成大量的样板代码。现在我再也不会了。2016年我加入了一个构建在Spring基础上的项目,里面早已经在使用Lombok。自从那之后我就再也离不开Lombok了...为什么呢?

Lombok到底是何方神圣?

简要来说,Lombok是一个类库,它可以被集成到IDE和构建工具中为开发者生成大量的代码。比如说,你再也不需要为POJO类添加诸如getters,settersequals,hashCode和 toString 的方法,只需要一个简单的[@Data](https://projectlombok.org/features/Data)注解就可以完成这些事情。

第 1 段(可获 1.81 积分)

构建工具支持,如Gradle或Maven,都没有任何问题

Lombok跟Gradle一起使用没有任何问题。你只需要添加compileOnly的Lombok依赖,也就是这样:

compileOnly ("org.projectlombok:lombok:${lombokVersion}")

同样的,我使用Maven也不曾遇到过任何问题,尽管我主要使用Spring相关技术开发项目,而且近来他们都是可以基于Gradle构建的了。

IntelliJ的支持也相当的给力

我日常工作中使用IntelliJ,它对Lombok的支持很好。Lombok可以通过第三方插件进行支持:https://github.com/mplushnikov/lombok-intellij-plugin

第 2 段(可获 1.09 积分)

该插件的配置相当的简单:只需要启用Lombok插件以及对相应项目的注解处理即可。 当然,Lombok必须要加载到类路径上。当项目配置好了以后,你就可以开始导入Lombok的注解,并且开始在你的源代码里立马使用它们。

在IntelliJ里我并没有发现代码自动完成会有什么问题,也没有看到任何延迟或者丢失的功能什么的。当我想要查看生成的方法的代码定义时,它给我定位到了Lombok的注解处,这样其实也不错,不过如果能够看到生成的代码的话那会更好些。

第 3 段(可获 1.2 积分)

如果说到不好的方面的话,那就是有时候代码并不会立即可用 - 那么这时候就需要手动的进行编译。对我来说,很少遇到这种情况。

当Lombok生效了以后,有些功能不能通过代码编辑器直接使用。比如,当使用@Builder注解时,生成了大量的代码,包括builder类。要想找到某个builder方法的调用位置,你需要在结构(Structure)视图里查看。

我们是没办法通过名称导航到对应标识处,但是这看起来并不是什么问题:当使用Lombok时,你肯定是知道生成的代码跟某个特定的类有关联。比如,UserBuilder是跟User类相关的,因此你可以通过进入User类来查看其builder(如果你真的需要这么做的话)。

第 4 段(可获 1.56 积分)

总而言之,对日常工作使用来说, 使用IntelliJ并不会产生什么阻碍。

代码更容易阅读

使用Lombok最主要的一个优势就是使用者需要读的代码变少了。这对于代码审查来说尤其显得有用,当我打开一个类,我可以立即得知它是不是一个纯粹的用@Data注解的类或者是一个用@Value注解的对象,或者它是否提供了@Builder注解,等等。而且尽管Lombok会要求在代码里添加更多的注解(Lombok注解,JPA注解,Jackson注解,Spring注解等),但这样还是会使得代码更加简洁且易读和易于审阅。

第 5 段(可获 1.25 积分)

Lombok 使得部分团队实践标准化

比如,在我开始使用Lombok前,每一个项目都会有不同的创建builder的办法。有了Lombok之后,就更加容易来维护这些实践了(@Builder 和 @Singularity)。

Lombok与其他类库配合正常

我在使用JPA或者Jakson注解与Lombok注解混用时并没有出现过什么问题。 不过我听说MapStruct和Lombok在过去可能会有一些问题,不过据说现在已经修复了: (https://github.com/mapstruct/mapstruct/issues/510)

Lombok注解可以很容易被Spring组件使用,这样在创建的时候就可以不用写太多代码了。比如,@AllArgsConstructor注解可以用来注入bean的依赖,因为Spring不要求构造器必须使用@Autowire注解:

第 6 段(可获 1.46 积分)
@Service
@RequiredArgsContructor
class SomeService {
    private final Dep1 dep1;
    private final Dep2 dep2;
}

值得注意的是,Spring Boo 的初始化器(Initializer) (http://start.spring.io/) 在生成的项目文件中提供了Lombok依赖(即作为核心依赖之一加入到你的新项目中)。

下一个项目就考虑使用Lombok吧

Lombok是一个伟大的类库,能够加速开发进程,使得代码更加简洁,易读且易于维护。它已经足够成熟值得一试了。即使你只是决定在简单的用例中使用,它也会给你的项目带来很大的价值的。不管你是否相信我,反正我是在试用了几个星期后才彻底打消怀疑念头的。

第 7 段(可获 1.33 积分)

文章评论

访客
确实值得一试