Lombok 使用详解:
一、Lombok简介:
Lombok是一个基于LGPL的开源J2EE综合开发环境的Eclipse插件,对编码,发布,以及debug等各个软件开发的生命周期提供支持,支持JSP,EJB等。Lomboz是Eclipse的一个J2EE的插件,它将很多java应用服务器、J2EE组件和Web应用开发集成到Eclipse中,可以帮助Java开发者使用Eclipse建立、测试、部署J2EE应用。
lombok 以简单的注解的形式来精简 java 代码,提升开发人员生产效率的辅助工具。特别是相对于 POJO,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码。
二、lombok 安装:
使用 lombok 是需要安装的,如果不安装,IDE 则无法解析 lombok 注解。先在官网下载最新版本的 JAR 包,我下载的是lombok-1.16.4.jar
(1). 法一:双击下载下来的 JAR 包安装 lombok
安装目录为eclipse安装路径,安装完成后,查看eclipse.ini 是否出现配置:
-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar 若出现,则说明安装成功。
(2).法二:eclipse / myeclipse 手动安装 lombok
a. 将 lombok.jar 复制到 myeclipse.ini / eclipse.ini 所在的文件夹目录下
b. 打开 eclipse.ini / myeclipse.ini,在最后面插入以下两行并保存:
-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar
c.重启 eclipse / myeclipse
(3).法三:IDE软件安装lombok插件
三、Maven添加依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
</dependencies>
四、lombok 注解:
lombok 提供的注解不多,可以参考官方视频的讲解和官方文档。
Lombok 注解在线帮助文档:http://projectlombok.org/features/index.
下面介绍几个我常用的 lombok 注解:
(1)@Data :注解在类上;
@EqualsAndHashCode
@Getter方法
(2)@Setter/@Gette:注解在属性上;为属性提供 setting/getting 方法(自动生成Getter/Setter方法)
使用lombok:
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class GetterSetterExample {
@Getter @Setter private int age = 10;
@Setter(AccessLevel.PROTECTED) private String name;
}
不使用lombok:
public class GetterSetterExample {
private int age = 10;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
protected void setName(String name) {
this.name = name;
}
}
(3)@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
(4)@Slf4j : 注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
(5)@NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
(6)@AllArgsConstructor:注解在类上;为类提供一个全参的构造方法
(7)@NonNull
: 注解在属性上,用来校验参数(可以帮助我们避免空指针)
使用lombok:
import lombok.NonNull;
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super(“Hello”);
this.name = person.getName();
}
}
不使用lombok:
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super(“Hello”);
if (person == null) {
throw new NullPointerException(“person”);
}
this.name = person.getName();
}
}
(8) @Cleanup: 自动帮我们调用close()
方法。
使用lombok:
import lombok.Cleanup;
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
}
不使用lombok:
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[1]);
try {
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
} finally {
if (out != null) {
out.close();
}
}
} finally {
if (in != null) {
in.close();
}
}
}
}