Java Lombok 减少代码冗余 利刃

前言:

现在是ORM框架大行其道的时代,有着如Hibernate这样重量级的框架,提供Java<->数据的双向映射,也有如Mybatis这样的轻量级框架,提供Java<-数据的单方向映射,

无论使用的是哪种流行的框架,在其中都少不了Model类的编写,还有其中错综负责的getter/setter方法,这些getter/setter方法的存在,使得代码变得非常的臃肿。那么需要怎

么解决这个问题呢,便引入了这篇文章的主角Lombok。

1.下载:

Lombok的官网地址是:http://projectlombok.org/

2.使用:

Lombok是一种JavaArchive(jar)文件,旨在为了减少编码时的冗余。

自动安装方法:

直接运行lombok.jar文件,首先要确保机器的Java环境已正常配置,在自动安装完成后,会达到和手动安装一样的效果。

手动安装方法:

1.将lombok.jar复制到myeclipse.ini/eclipse.ini所在的文件目录中。

2.打开 eclipse.ini / myeclipse.ini,在最后面插入以下两行并保存:

-Xbootclasspath/a:lombok.jar

-javaagent:lombok.jar

3.重启 myeclipse/eclipse

注:这是官方提供的一种安装方式,当使用的是myeclipse时,按照上述方法时不能正常使用的,需要将myeclipse的可执行文件名称由myeclipse.exe更改为

eclipse.exe,此时才可以正常使用(具体原因是不是因为lombok在内部指定了一些常量,还未定)。

IDE中使用步骤:

按照正常步骤安装Lombok.jar文件后,在项目中需要引入Lombok.jar文件,将其加入到ClassPath路径下。

3.详解:

Lombok是基于注解完成标记的,再对已经标记的变量进行特殊解析,Lombok中包含着如下一些自定义注解:

@val/@NonNull/@Cleanup/@Getter / @Setter/@ToString/@EqualsAndHashCode/@NoArgsConstructor/@RequiredArgsConstructor and @AllArgsConstructor

/@Data/@Value/@Builder/@Synchronized/@Getter(lazy=true)/@Log、Lombok提供了这几种注解来完成对代码的精简。

Lombok能做到在IDE少编写代码,既不是用annotations process,也不是反射,而是直接在编译器对原码的编译过程进行操作。

具体示例如下:

使用Lombok的MModel类:

public @Data class User {

private String name;

}

或者

public class User {

@Getter @Setter

private String name;

}

此时:若在IDE的Outline视窗中可以看到在字节码中直接生成了name的getter/setter方法,这极大的简化了在编程过程的代码量,况且Lomnok无需第三方依赖,便可完成

对于Model类的操作。

在其他类中可以像正常使用类一样使用:

User user = new User();

user.setName("Wangbc");

user.getName();

4.注解含义:

·@Data:相当于同时使用了@String、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor这些注解,对于Pojo类十分有用

·@NonNull:给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE

·@CleanUp:自动生成try-finally这样的代码来关闭流

·@Getter(lazy=true):可以替代经典的Double Check Lock样板代码。

·其他的可以参考官网文档进行详细了解。

5.不足:

尽管Lombok可以对代码进行精简,但是在使用的过程中还是会遇到问题:例如,源码中代码的隐藏使得在代码调试的过程中难度增加,增加代码重构的麻烦,而且

Lombok在使用过程中与eclipse尚不能完美兼容,这些在实际应用过程中都是需要考虑的问题,但本人觉得其无伤大雅。

6.完结:

Lombok是一个很小的,但是很实用的开源项目,它可以大幅的减少由于ORM框架应用导致的代码冗余。无论如何,对于已经接近完善project的源码中,毫无用处的重复代

码会降低其可读性,精而少的代码才更易维护。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 23:48:57

Java Lombok 减少代码冗余 利刃的相关文章

静态html页面 ul+li模拟table,减少代码冗余,列数切换更方便

先直接上效果图: 二.帖代码 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="Author" content="haley"> 6 <meta name="Keywords" content="表格"&

swift里类方法和构造方法的使用来减少代码冗余提高开发效率

对于日常中重复性的可以抽取的实现尽量抽取 比如实现导航栏右侧 UIBarButtonItem的添加 如果使用 private func setupNavigateionBar(){ let btn = UIButton() btn.setImage(UIImage(named:"icon_shouye_off"), for: .normal) btn.sizeToFit() navigationItem.leftBarButtonItem = UIBarButtonItem(custo

(转)Java二进制指令代码解析

转自http://www.blogjava.net/DLevin/archive/2011/09/13/358497.html Java二进制指令代码解析 Java源码在运行之前都要编译成为字节码格式(如.class文件),然后由ClassLoader将字节码载入运行.在字节码文件中,指令代码只是其中的一部分,里面还记录了字节码文件的编译版本.常量池.访问权限.所有成员变量和成员方法等信息(详见Java字节码格式详解).本文主要简单介绍不同Java指令的功能以及在代码中如何解析二进制指令. Ja

Java二进制指令代码解析

http://www.blogjava.net/DLevin/archive/2011/09/13/358497.html http://blog.csdn.net/sum_rain/article/details/39892219 http://www.blogjava.net/DLevin/archive/2011/09/13/358497.html Java二进制指令代码解析 小注:去年在看<深入解析JVM>书的时候做的一些记录,同时参考了<Java虚拟机规范>.只是对指令的

java技巧--提高代码运行效率

java技巧--提高代码运行效率 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资源的并发访问 第二,控制实例的产生,以达到节约资源的目的 第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信 - 2.尽量避免随意使用静态变量 要知道,当某个对象被定义为stataic变量所引用,那么gc通常是不会回收这个对象所占有的

C和C++的面向对象专题(5)——合理使用模板,避免代码冗余

本专栏文章列表 一.何为面向对象 二.C语言也能实现面向对象 三.C++中的不优雅特性 四.解决封装,避免接口 五.合理使用模板,避免代码冗余 六.C++也能反射 七.单例模式解决静态成员对象和全局对象的构造顺序难题 八.更为高级的预处理器PHP 五.合理使用模板,避免代码冗余 下面我们来讨论一下,如何解决模板的不易封装的问题. 我们提供这样一种思路,对于链表一类的通用类型,我们尽量采取强制类型转换的方式,尽量避免模板的滥用. 同样,我们应该避免对结构体的直接存储,尽量使用类似java的指针传递

java提高篇-----代码块

自己添加部分 构造代码块在变量初始化之后执行:也符合java编程思想中  ---- 静态构造代码块>变量初始化>普通构造代码块 在编程过程中我们可能会遇到如下这种形式的程序: public class Test { { //// } } 这种形式的程序段我们将其称之为代码块,所谓代码块就是用大括号({})将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法.一般来说代码块是不能单独运行的,它必须要有运行主体.在Java中代码块主要分为四种: 一. 普通代码块 普通代码块是我们用得最多

Android NDK开发篇(五):Java与原生代码通信(数据操作)

尽管说使用NDK能够提高Android程序的运行效率,可是调用起来还是略微有点麻烦.NDK能够直接使用Java的原生数据类型,而引用类型,由于Java的引用类型的实如今NDK被屏蔽了,所以在NDK使用Java的引用类型则要做对应的处理. 一.对引用数据类型的操作 尽管Java的引用类型的实如今NDK被屏蔽了,JNI还是提供了一组API,通过JNIEnv接口指针提供原生方法改动和使用Java的引用类型. 1.字符串操作 JNI把Java的字符串当作引用来处理,在NDK中使用Java的字符串,须要相

Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明文是yanzi1225627,得到MD5加密后的字符串是:14F2AE15259E2C276A095E7394DA0CA9  但不能由后面一大串倒推出yanzi1225627.因此可以用来存储用户输入的密码在服务器上.现在下载文件校验文件是否中途被篡改也是用的它,原理参见:http://blog.c