Lombok 使用教程
项目中使用 Lombok
- 项目添加 Lombok 的 Maven 依赖:
1 | <dependency> |
- IDEA 安装 Lombok 插件:
- IDEA 启用 Annocation Processors:
- 使用 Lombok 提供的注解:
- @Getter
- @Setter
- @ToString
- @EqualsAndHashCode
- @NonNull
- @NoArgsConstructor
- @RequiredArgsConstructor
- @AllArgsConstructor
- @Data
- @Builder
- @Log
- @Cleanup
- @SneakyThrows
使用 Lombok 的优点
- 减少代码维护:新增属性的时候,会减少非常多的代码维护工作
- 减少模板代码:Lombok 对大量的模板代码进行了封装,可以减少重复代码
使用 Lombok 的缺点
1) 侵入性太强:Lombok 的使用要求开发者一定要在 IDE 中安装对应的插件,如果项目组中使用了 Lombok,那么所有开发人员都必须安装 IDE 插件,否则就没办法协同开发。
2) 降低代码可读性:在项目中使用了 Lombok,确实可以帮忙减少很多代码,但是这些代码是要在编译阶段才会生成的,所以在开发的过程中,其实很多代码其实是缺失的。大量使用 Lombok,就导致代码的可读性降低,而且也会给代码调试带来一定的问题。比如,想要知道某个类中的某个属性的 Getter 方法都被哪些类引用的话,就没那么简单了。
3) 容易踩坑:在使用 Lombok 过程中,如果对于各种注解的底层原理不理解的话,很容易产生意想不到的结果。举一个简单的例子,当使用 @Data 定义一个类的时候,会自动帮我们生成 equals()
方法,但是如果只使用了 @Data,而不使用 @EqualsAndHashCode(callSuper=true)
的话,会默认是 @EqualsAndHashCode(callSuper=false)
,这时候生成的 equals()
方法只会比较子类的属性,不会考虑从父类继承的属性,无论父类属性访问权限是否开放,这就可能得到意想不到的结果。
4) 影响升级:因为 Lombok 对于代码有很强的侵入性,这就可能带来一个比较大的问题,那就是会影响日后对 JDK 版本的升级。按照如今 JDK 的升级频率,每半年都会推出一个新的版本,但是 Lombok 作为一个第三方工具,并且是由开源团队维护的,那么 Lombok 的迭代速度是无法保证的。如果日后需要升级到某个新版本 JDK 的时候,若其中的特性在 Lombok 中不支持的话就会受到影响。还有一个可能带来的问题,就是 Lombok 自身的升级也会受到限制,因为一个应用可能依赖了多个 Jar 包,而每个 Jar 包可能又要依赖不同版本的 Lombok,这就导致在应用中需要做版本仲裁,而 Jar 包版本仲裁是没那么容易的,而且发生问题的概率也很高。
5) 破坏封装性:使用 Lombok 会破坏封装性,众所周知,Java 的三大特性包括封装性、继承性和多态性;如果在代码中直接使用 Lombok,那么会自动生成 Getter、Setter 等方法,这就意味着一个类中的所有参数都自动提供了设置和读取方法。