一、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 :注解在类上;
自动为所有字段添加:
@ToString
@EqualsAndHashCode
@Getter方法
为非final字段添加
@Setter
@RequiredArgsConstructor
(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(); } } } }