作用
Lombox是个IDE插件,通过在代码里写lombox官方提供的注解能自动生成代码,有助于优化代码简洁性,消除臃肿,当然如果不用也可以,只是要多写几行代码,比如POJO类里的getter和setter方法等。
使用步骤
在IDE里安装lombox插件
eclipse安装步骤:
1. 下载Lombok.jar,可以从官文或网络上下载jar包
2. 将 lombok.jar 复制到 myeclipse.ini / eclipse.ini 所在的文件夹目录下
3. 打开 eclipse.ini / myeclipse.ini,在最后面插入以下两行并保存:
-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar
4.重启 eclipse / myeclipse
IDEA里安装步骤:
这个比较简单,打开工具,依次弹出界面File->Setting->Plugins->Browse Repositories 搜索lombox插件,然后在右边点击“安装”
即可安装。然后在设置面板里让注解生效Build,Execution,Deployment->Compiler->Annotation Processors->Enable annotation processing勾选
添加Maven依赖
目的是引入注解,供插件生成代码。
最新版本可从maven仓库里查
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
</dependencies>
注解
lombok使用过程中主要是靠注解起作用的。
官方注解列表
总共10几个个注解:
val
,var
,@NonNull
,@Cleanup
,@Cleanup
,@Getter/@Setter
,@ToString
,@EqualsAndHashCode
,@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
,@Data
,@Value
,@Builder
,@Value
,@SneakyThrows
,@Synchronized
,@Getter(lazy=true)
,@Log
,experimental
。
1.@NonNull
空指针过滤,帮助我们校验参数是否是空指针。注解在参数上,如果该参数为null 会throw new NullPointerException(参数名);
使用lombok:
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
未使用
public NonNullExample(Person person) {
super("Hello");
if (person == null) {
throw new NullPointerException("person");
}
this.name = person.getName();
}
2.@Cleanup
,注解在变量前。自动回收资源,默认调用close()
方法
例如:
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
3.@Getter/@Setter,
注解在属性上或类上。为属性提供 setting/getting方法
4.@ToString
,注解在类上。自动生成toString()方法
5.@EqualsAndHashCode
,注解在类上。自动重写父类的hashCode
和 equals
方法
6.生成构造方法的annotation一共有三个。
@NoArgsConstructor
: 注解在类上。生成一个无参数的构造方法,这个annotation在与其他的annotation配合起来使用的时候更加能凸显出他的重要性,例如在使用hibernate这种框架的时候,如果有一个有参数的构造方法的时候,NoArgsConstructor会展示出他的作用。
@RequiredArgsConstructor
: 注解在类上。会生成一个包含常量和标识了NotNull的变量 的构造方法。生成的构造方法是private,如何想要对外提供使用可以使用staticName选项生成一个static方法。
@AllArgsContructor
: 注解在类上。 会生成一个包含所有变量,同时如果变量使用了NotNull annotation , 会进行是否为空的校验
7.@Data
.注解在类上。All together now: A shortcut for @ToString, @EqualsAndHashCode, @Getter on all fields, and @Setter on all non-final fields, and @RequiredArgsConstructor!.意思是自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor!
默认生成的所有的代码都是public的,如果需要不同权限修饰符可以使用AccessLevel.NONE选项
例如
import lombok.AccessLevel;
import lombok.Setter;
import lombok.Data;
import lombok.ToString;
@Data
public class DataExample {
private final String name;
@Setter(AccessLevel.PACKAGE) private int age;
private double score;
private String[] tags;
@ToString(includeFieldNames=true)
@Data(staticConstructor="of")
public static class Exercise<T> {
private final String name;
private final T value;
}
}
8.@Value
,注解在类上。它在编译是自动添加Getter、toString()、equals()、hashCode()以及一个全参的构造器。
与@Data对应,主要区别就是如果变量不加@NonFinal ,@Value会给所有的弄成final的。当然如果是final的话,就没有set方法了。
import lombok.AccessLevel;
import lombok.experimental.NonFinal;
import lombok.experimental.Value;
import lombok.experimental.Wither;
import lombok.ToString;
@Value public class ValueExample {
String name;
@Wither(AccessLevel.PACKAGE) @NonFinal int age;
double score;
protected String[] tags;
@ToString(includeFieldNames=true)
@Value(staticConstructor="of")
public static class Exercise<T> {
String name;
T value;
}
}
9.@Log
,注解在类上。日志注解,自动生成一个名为log
静态final变量的日志对象,实例化的类可直接使用该变量。
即注解@Log
的能类自动生成private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(XXX.getName());
变量。
这里也提供了几种其它日志形势的注解包括log4j和Slf4j,但变量不变,还是static final log
.
@CommonsLog
Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@JBossLog
Creates private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@Log
Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
Creates private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);