`
阅读更多

最初我是在公司内部的broadcast上面听到有principal介绍到它的,和AspectJ归在一起。看了几个例子之后觉得有点意思,就去Lombok的官网上扒了一下。我们已经知道向AspectJ、CGLib等等都可以做到对已有Java代码在字节码层级的改变,无论是编译时期静态织入还是运行时期动态代理,对于我们使用AOP来减少那些重复性编码的劳动、增加切面性质的逻辑颇有帮助。这里有几个概念:

  • 首先是AOP,我在这里不啰嗦,网上有的是这样的文章。
  • 其次,如果你还没有接触过AspectJ,那么在Lombok之前,了解AspectJ是值得推荐的。和Lombok相比,AspectJ更强大,有它自己的语法,本身更像是一个代码生成器,它有独特的语法编译工具,可以自己生成class文件。换言之,它已经超出了往常Java项目最后简单地编译成“jar”被调用的范畴。
  • 再次,是JDK的动态代理。原理上不复杂,JDK的Proxy类提供了一个建立代理对象的方法,需要传入被代理对象的接口集合、class loader和代理对象自己,其中代理对象需要实现InvocationHandler的invoke方法,在其中实现了,对于被代理对象的方法执行,可以进行任意的行为改变。最终,生成的代理对象和被代理对象实现自相同的接口,只是方法的行为被改变了。
  • 最后,是CGLib。相较于AspectJ,CGLib是一个纯纯粹粹的jar包而已了,也就意味着,它对于字节码的织入,只能在运行时通过某种方式实现了。它使用的方式是动态代理,但是相对于JDK传统的动态代理方式,它没有对被代理对象接口的要求,换言之,如果被代理对象没有实现自任何接口,或者期望改变的方法没有源自任何接口,只要不是final修饰的类和方法,一样可以做到动态代理。它的原理也不复杂,在运行时给被代理类创建一个子类,覆写被代理类中需要改变行为的方法。和JDK的动态代理相比,除去类创建时更大的开销,在方法执行时它的效率要高过前者。

现在让我们回到Lombok,它的原理和AspectJ类似。它的目的在于让程序员少写一些“样板代码”。所谓样板代码,是那些没有营养,却又不得不写的代码,写的时候觉得毫无技术含量,依样画葫芦,比如一个类的全参构造函数、无参构造函数、get/set方法、toString方法等等。这些代码你可以指望向Eclipse这样的IDE帮你自动生成到你的代码文件里去,当然,也可以借由Lombok这样的工具,在编译阶段,不修改你的代码源文件,但是让编译出的class文件具备样板代码的逻辑。

下面这张图来自Lombok官网的一段视频。你可以看到左侧的代码仅仅是一个普通的POJO类,增加了Lombok的注解而已。右侧显示了编译出的class文件,get/set方法已经生成完毕。可以使用反编译工具打开class文件查看,这样的class文件和手写样板代码生成出来的class文件是一样的。

Lombok介绍

我们再来仔细认识一下Lombok的特性:

1. val关键字:

你可以使用val关键字写出这样的代码来,看起来就是duck type啊:

 

1
2
3
4
5
6
public String example() {
  val example = new ArrayList();
  example.add("Hello, World!");
  val foo = example.get(0);
  return foo.toLowerCase();
}

 

2. 注解,除了一看便知的@Getter、@Setter、@ToString等等以外,我介绍几条有意思的Lombok注解,你可以在这里找到全集

  • @Data:相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstructor这些注解,对于POJO类十分有用。
  • @NonNull:给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE。
  • @Cleanup:自动生成try-finally这样的代码来关闭流(你一定写过使用-关闭流的样板代码)。
  • @Getter(lazy=true):可以替代掉经典的Double Check Lock样板代码!

我很喜欢这种小项目,很小的范围,简单,而且专注,解决非常特定的问题。

文章系本人原创,转载请保持完整性并注明出自《四火的唠叨》

1
2
分享到:
评论
1 楼 witcheryne 2013-09-09  
lombok用了快两年了。 必备工具。

相关推荐

    lombok离线插件包

    **Lombok介绍** 1. **主要功能**: - `@Data`: 生成全属性的getter和setter。 - `@Setter` 和 `@Getter`: 分别用于生成setter和getter方法。 - `@NoArgsConstructor` 和 `@AllArgsConstructor`: 创建无参和全参...

    lombok-plugin

    **Lombok介绍** Lombok项目始于2009年,由Rogier van Woudenberg和Remy Schilder发起。它的核心理念是减少Java开发中的样板代码,提高代码的可读性和简洁性。Lombok通过提供一系列注解(如`@Data`、`@...

    小辣椒插件lombok.rar

    1. Lombok介绍: Lombok是一个开源项目,其目标是减少Java开发者的代码量,通过在源文件中添加特定的注解,就能自动生成对应的getter、setter、构造函数等。这不仅减少了手动编写这些代码的时间,还避免了因为人为...

    lombok的eclipse安装包

    这里我们主要介绍使用压缩包的方法,即手动安装。 1. 首先,你需要下载本压缩包中的`lombok.jar`文件。 2. 接下来,打开Eclipse,进入“Help”菜单,然后选择“Install New Software”。 3. 在弹出的窗口中,点击右...

    lombok 1.18.24

    1. **注解介绍** - `@Data`: 这个注解会自动生成所有字段的 getter 和 setter 方法,同时包括 equals、hashCode 和 toString 方法。 - `@Getter` 和 `@Setter`: 分别用于生成 getter 和 setter 方法,允许对访问...

    lombok.jar及eclipse两种安装方式

    本文将详细介绍如何在Eclipse或MyEclipse环境中安装和使用Lombok,以及如何获取`lombok.jar`。 首先,我们需要了解`lombok.jar`是什么。`lombok.jar`是Lombok库的可执行文件,包含了Lombok的所有功能。它通过被集成...

    lombok-plugin-2021.3.zip

    Lombok 插件的安装与使用对于提高开发效率具有重要意义,下面将详细介绍 Lombok 的核心概念、功能以及如何在 IDEA 中配置和使用这个插件。 1. **Lombok 的核心概念:** Lombok 是一个源码处理库,它在编译期间自动...

    lombok详细使用文档

    Lombok提供了多个注解来满足不同场景的需求,下面详细介绍几个常用的注解: - **`@Data`**:这是一个复合注解,包含了`@ToString`、`@EqualsAndHashCode`、`@Getter`、`@Setter`、`@RequiredArgsConstructor`。它为...

    idea lombok 最新插件

    本文将详细介绍Idea Lombok插件的最新版本,包括其功能、安装方法以及如何在本地和离线环境中进行安装。 首先,了解Lombok的基本概念。Lombok是一个Java库,它在编译时自动插入getter、setter、equals、hashCode、...

    eclipse下lombok 插件jar包及安装方法

    本篇文章将详细介绍如何在Eclipse中安装和使用Lombok插件。 首先,我们需要下载Lombok的jar包。Lombok官网提供了最新的版本下载,你可以访问https://projectlombok.org/download 来获取。下载完成后,会得到一个名...

    lombok资源.rar lombok插件,附详细文档说明步骤安装lombok 100%成功!

    以下将详细介绍Lombok的核心概念和如何使用这个压缩包进行安装。 1. Lombok核心概念: - `@Data`: 这个注解会在类的所有字段上生成对应的getter和setter方法,同时还会添加equals(), hashCode()和toString()方法。...

    IDEA安装Lombok插件失败的解决方案.docx

    本文将详细介绍IDEA安装Lombok插件失败的解决方案,解决了无法通过插件仓库下载安装Lombok插件的问题。 一、Lombok简介 Lombok是一个Java语言的实用工具,可以帮助开发人员消除Java代码的冗长,尤其是对于简单的...

    2021.2.3idea安装lombok插件方法.zip

    在2021年的版本中,IDEA对插件安装方式进行了更新,本教程将详细介绍如何在IDEA 2021.2.3版本中安装Lombok插件。 首先,我们需要了解Lombok插件的作用。Lombok通过在编译时动态插入代码,减少了我们在类中编写大量...

    lombok-1.18.12.jar

    2. **注解介绍**: - `@Data`:这是Lombok最常用的注解,用于自动生成getter、setter、构造函数、equals、hashCode和toString方法。 - `@AllArgsConstructor`:自动生成带有所有字段的全参构造器。 - `@...

    lombok插件

    在Lombok的官方网站上,你可以找到关于它的全面介绍和所有可用注解的详细说明。官方文档不仅解释了每个注解的作用,还提供了丰富的示例,帮助开发者理解如何在项目中正确使用这些注解。因此,对于深入理解和有效利用...

    关于Lombok插件的使用.docx

    下面是一些常用注解的详细介绍: - **@Setter**:用于生成setter方法。可以作用于类级别或特定字段。作用于类级别时,将为类中的所有非静态字段生成setter方法;作用于字段级别时,仅生成该字段的setter方法。 - **...

    lombok-plugin.rar

    本文将详细介绍如何在IntelliJ IDEA中安装和使用Lombok插件。 1. **Lombok简介** Lombok库提供了诸如`@Data`、`@Setter`、`@Getter`、`@NoArgsConstructor`、`@AllArgsConstructor`等一系列注解,这些注解可以自动...

    eclipse插件 lombok.jar

    对于 Eclipse,我们在前面已经介绍了安装方法。对于 IntelliJ IDEA,可以通过插件市场搜索并安装 "Lombok Plugin"。 **4. 注意事项与最佳实践** - 虽然 Lombok 能够减少代码量,但过度依赖注解可能降低代码的...

    lombok.jar

    Lombok注解介绍 #### 1.1 `@Data` `@Data` 是Lombok提供的一个复合注解,它包含了`@ToString`、`@EqualsAndHashCode`、`@Getter`和`@Setter`,可以自动为类的所有非静态、非瞬态字段生成getter和setter方法,并且...

    java lombok jar下载

    下面详细介绍一些关键的注解及其作用: 1. `@Data`:这个注解是Lombok最常用的一个,它相当于同时应用了`@Getter`、`@Setter`、`@ToString`、`@EqualsAndHashCode`和`@AllArgsConstructor`,为类的所有非静态字段...

Global site tag (gtag.js) - Google Analytics