背景

最近在做一个小功能,又不想在原有体态臃肿的项目中追加,为了调试方便并且可以快速开发就采用了springboot。由于使用了JPA,建了几个类,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,那么Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,想着前几天听说有一款简化神奇Lombok,特此拿来玩玩记录一下。

简介

Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。

官方地址:https://projectlombok.org/

github地址:https://github.com/rzwitserloot/lombok

Lombok注解

下面对Lombok的简单使用方法做一下总结:

@NotNull 作用在方法参数上的注解,用于自动生成空值参数检查。

@Cleanup 作用在局部变量上,在作用域结束时会自动调用close方法释放资源。

@Getter 作用在字段上,会自动生成字段的Getter;作用在类上,会自动生成该类所有非静态字段的Getter,还能控制Getter的访问级别

@Setter 基本同上。

@ToString 类注解,自动生成类的toString方法,可以做一些定制,比如不使用某个字段,不调用Getters等。

@EqualsAndHashCode 类注解,自动生成类中所有非静态非瞬时字段的equals方法和hashCode方法。

@NoArgsConstructor 类注解,自动生成一个无参构造函数。

@AllArgsConstructor 类注解,生成一个初始化所有字段的构造函数。

@RequiredArgsConstructor 类注解,为final字段和标记了@NotNull的字段生成构造函数。

@Data 类注解,相当于同时应用了@Getter、@Setter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor。如果已经定义了一个构造方法,就不会再自动生成构造方法了。

@Value 类注解,和@Data类似,但是用于不可变类型。生成的类和所有字段都设置为final,所有字段都为private,自动生成Getter但是没有Setter,会生成初始化所有字段的构造函数。相当于同时应用了final @ToString、 @EqualsAndHashCode、 @AllArgsConstructor 、@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)和 @Getter。

实际开发中一般常用到的:

@Data

@NoArgsConstructor

@AllArgsConstructor

这三个,其他的没特殊需求可以自行忽略。

maven引用

由于开发中我们使用了Maven,直接在pom.xml中引入以下坐标:

org.projectlombok

lombok

1.16.14

下面是简单Bean示例:

@Data // 生成 getter/setter/equals/canEqual/hashCode/toString

@NoArgsConstructor // 为类提供一个无参的构造方法

@AllArgsConstructor // 为类提供一个全参的构造方法

public class User {

private Integer id;

private String name;

private Integer age;

}

为了对比效果,下面是我们平时生成的Bean:

public class User {

private Integer id;

private String name;

private Integer age;

public User() {

super();

}

public User(Integer id, String name, Integer age) {

super();

this.id = id;

this.name = name;

this.age = age;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

}

可以看到,由于应用了@Data注解和两个构造方法注解,代码变得非常短小易读。当然Lombok也是存在诸多问题的,比如无法支持多种参数构造器的重载,需要安装IDE插件实现get,set效果。

Lombok原理

虽然Lombok也用到了注解,但是它并没有用到反射,而是通过一些奇技淫巧,在代码编译时期动态将注解替换为具体的代码。所以JVM实际运行的代码,和我们手动编写的包含了各种工具方法的类相同。

插件安装

其实,一开始博主以为不需要任何插件支持的,即使项目中引入了坐标,当你get属性的时候也会报错。

官网中其实提供了相关的配置,由于使用的是Eclipse,这里简单的说下Eclipse种的安装步骤。

1.下载lombok.jar包https://projectlombok.org/download.html

2.双击运行(有些系统安装的压缩包的问题可能无法执行)

3.重启Eclipse,然后update一下Maven项目即可。

java简化代码的jar_JAVA奇技淫巧简化代码之lombok相关推荐

  1. C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流

    C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流 说明:学做了4关推箱子, 仅供初学者参考可用g++ 编译,可以将内容复制到TXT文件,将后缀改为".cp ...

  2. Java 线程池详解及实例代码

    转载自  Java 线程池详解及实例代码 这篇文章主要介绍了Java 线程池的相关资料,并符实例代码,帮助大家学习参考,需要的朋友可以参考下 线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时 ...

  3. Java基础学习总结(164)——别让Lombok使你的Java代码处于“亚健康”状态

    如果您正在阅读此文,想必您对Project Lombok已经有了一段时间的了解.您是否正准备拥抱Lombok?还是正准备将如此酷炫的项目推荐给你的团队?如果您准备那么做,不妨听听我在使用Lombok一 ...

  4. 【Java设计模式 规范与重构】 六 代码重构小结

    最近趁着学习劲头足,如饥似渴的把代码重构部分也学习完了,可以说9月份属实非常充实,貌似也只有学习才能导致生活没有那么无聊. 代码重构博客目录 序号 文章列表 1 [Java设计模式 规范与重构] 一 ...

  5. java cxf服务端代码_【JAVA】 cxf 生成 webservice 服务端代码

    CXF Apache CXF = Celtix + XFire.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding . ...

  6. java中普通代码块,构造代码块,静态代码块的区别及代码示例

    本文转自:http://www.cnblogs.com/sophine/p/3531282.html 执行顺序:(优先级从高到低)静态代码块>main方法>构造代码块>构造方法. 其 ...

  7. java.lang.Instrument 动态修改替换类代码

    java.lang.Instrument 动态修改替换类代码 | java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码. 这通常是在类的main方 ...

  8. java代码讲解_Java基础系列-代码块详解

    注:本文出自博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 前言 Java基础系列,尽量采用通俗易懂.循序渐进的方式,让大家真正理解Java基础知识! 代码块 ...

  9. java 实现违章_基于JAVA的车辆违章查询数据调用代码实例

    基于JAVA的车辆违章查询数据调用代码实例 代码描述:基于JA V A的车辆违章查询数据调用代码实例 相关平台:聚合数据 import java.io.BufferedReader; import j ...

最新文章

  1. Step by step to create time dependent view
  2. Lotus Sametime Server R8.x 标准版部署排错
  3. interop.cdo 发送邮件乱码_手把手教你用 Java 发送邮件,不用框架
  4. 全开源的固定资产设备管理系统,JAVA项目源码
  5. lucene全文检索包括双层PDF
  6. 卧槽!字节跳动的面试算法题,实在太变态了
  7. CruiseControl入门简介
  8. vector的几种初始化及赋值方式
  9. Latex之大小写罗马数字
  10. 有理数加法C语言pta,有理数
  11. 关于笔记本双显卡状态下独立显卡的配置问题
  12. 赛迪报告:除了“会呼吸”的肺,这些也能用3D打印实现!
  13. KMS工具激活office2016报错0x80080005的解决记录
  14. 消失的信用卡(2)——0-days
  15. Python 函数 | sorted 函数详解
  16. Bootstrap制作虚拟系统初始版本(无聊随便做的)
  17. 【英语四六级-必背单词】高中英语单词 (I) - MP3试听与下载
  18. modelsim 仿真 毛刺 原因
  19. “杀毒软件评测事件”显露360厚颜无耻的一面
  20. java+字体包下载_onlyoffice5.4.2离线包下载—解决中文字体问题

热门文章

  1. 目标检测——数据清洗的学习笔记
  2. Python——常见数据类型的调试笔记(“如何通过Debug信息判断数据类型”)
  3. 使用ubuntu钉钉
  4. 分享免费的2.4G板载PCB天线封装(AD)、WIFI天线、GSM天线、433M天线
  5. 使用网络调试助手 MQTT接入阿里云物联网平台,逐字节讲解,适用单片机/ESP8266接入阿里云
  6. 树莓派教程 - 1.6 树莓派GPIO库wiringPi 外接USB串口ttyUSB ch340 cp2102
  7. 敏捷开发“松结对编程”系列之七:问题集之一
  8. Java发送Http请求,解析html返回
  9. “迭代期内无变更”与敏捷开发产品版本规划
  10. RportViewer(20121023) 参数引起的异常