`
阅读更多

最初我是在公司内部的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.zip(lombok.jar)

    lombok.jar: 介绍:通过简单注解来实现精简代码来达到消除冗长代码的目的。 优点:提高编码效率、使代码更简洁、消除冗长代码、避免修改字段名时忘记修改方法名.

    Idea + Maven + Lombok配置

    Lombok plugin简单介绍,以及在idea+maven的环境下引入使用

    lombok注解介绍小结

    lombok是一个可以帮助我们简化java代码编写的工具类,这篇文章主要介绍了lombok注解介绍小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    lombok idea 插件最新版(解决报红错问题).zip

    软件介绍: lombok-plugin-0.23.jar最新版本lombok idea 插件,以解决idea2018.3 idea更新后lombok报红错问题。

    lombok.ogv视频资源

    主要介绍lombok的使用方式

    lombok idea用插件

    lombok是在编译阶段才生成相应的代码体,所以在项目中直接调用setter,getter,constructor会报错,这时候可以在IDE安装相应的插件支持lombok。这里介绍idea插件安装,eclipse请自行百度。

    详解Lombok安装及Spring Boot集成Lombok

    主要介绍了详解Lombok安装及Spring Boot集成Lombok,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Intellij IDEA 2017.3使用Lombok及常用注解介绍

    主要介绍了Intellij IDEA 2017.3使用Lombok及常用注解介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    lombok包+sts使用文档.zip

    lombok.jar,使用文档是介绍的sts4.1.0开发工具相关

    java项目中使用 Lombok遇到的问题小结

    主要介绍了java项目中使用 Lombok遇到的问题小结,需要的朋友可以参考下

    解决IDEA2020.2插件lombok报错问题(亲测有效)

    主要介绍了解决IDEA2020.2插件lombok报错问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    java中lombok的@Data引发问题详解

    主要给大家介绍了关于java中lombok的@Data引发问题的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java编码辅助工具Lombok用法详解

    主要介绍了Java编码辅助工具Lombok用法详解,可以使用Lombok来避免这种重复的操作,减少非核心代码的臃肿,提高编码效率,需要的朋友可以参考下

    HelloLombok:在Android Studio 1.2.21.3beta中使用lombok的步骤的记录

    你好Lombok 记录在Android Studio 1.2.2 / 1.3beta中使用lombok的步骤。 1.将lombok添加到依赖项( ) 通过参考Gradle部分中的描述将其添加到依赖项中。 2.确认可以使用lombok功能( ) @Getter @Setter可以按预期...

    idea中lombok启用的方法示例

    主要介绍了idea中lombok启用的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    IDEA安装lombok插件设置Enable Annotation Processing后编译依然报错解决方法

    主要介绍了IDEA安装lombok插件设置Enable Annotation Processing后编译依然报错解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    eclipse 安装lombok插件

    主要介绍了eclipse 安装lombok插件的详细步骤,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

    SpringBoot配置lombok与logback过程解析

    主要介绍了SpringBoot配置lombok与logback过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    lombok plugin v0.16.jar插件包.zip

    软件介绍: lombok plugin v0.16源码编译JAVA代码注解生成工具,能够帮助程序员简化并消除臃肿的Java代码,例如,在新建类后,添加字段手中,需要手动建立getter和setter方法、创建构建各类函数,非常繁琐,...

    IntelliJ IDEA2019 安装lombok的实现

    主要介绍了IntelliJ IDEA2019 安装lombok的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Global site tag (gtag.js) - Google Analytics