1.Lombok是什么?
lombok官方是这么解释的:Project Lombok是一个java库,可以自动插入编辑器和构建工具,为java增添趣味。永远不要再编写一个getter或equals方法,使用一个注释,您的类就有了一个功能齐全的构建器,自动化了您的日志变量,等等。
可以使用lombok的相关注解,让我们不再显示的的为一个类编写setter,getter,toString等方法,因为这些方法除了变量名不同,并没有其他不同。作为工具的最终目标,lombok合理的使用可以简化开发。
例如:
public class Test {
@Setter
@Getter
private Integer a;
}
等同于
public class Test {
private Integer a;
public Integer getA() {
return a;
}
public void setA(Integer a) {
this.a = a;
}
}
2.引入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
<scope>provided</scope>
</dependency>
3.lombok常用注解
Lombok采用注解的方式,在编译后会自动生成注解相对应的方法
常用注解:
1. @setter/@getter
作用在属性,类
为属性提供set/get方法
2. @ToString
作用在类上
为类自动生成toString()方法
3. @Data
作用在类上
会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法
4. @AllArgsConstructor
作用在类
为类生成全参数的构造方法
5. @NoArgsConstructor
作用在类
为类生成无参构造方法
6. @NonNull
作用在属性,方法,方法参数,方法中的本地变量(局部变量)
会分别校验属性,方法的全部参数,方法参数,方法本地变量是否为空
7. @Cleanup
作用在方法中的本地变量(局部变量)
作用在资源变量中,会自动调用其close方法关闭资源。
例如:
try {
@Cleanup
InputStream intput = new FileInputStream("file");
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
等同于
InputStream intput = null;
try {
intput = new FileInputStream("file");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
intput.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
8. @Log4j
作用在类上
为该类创建一个日志记录对象log,使用类org.apache.log4j.Logger
例如:
@Log4j
public class Test {
public static void main(String[] args) {
log.info("logger....");
}
}
9. @SneakyThrows
作用在方法,构造函数
暗中抛出异常,当我们需要抛出异常,在当前方法上调用,不用显示的在方法名后面写 throw
例如:
@SneakyThrows(value=NullPointerException.class)
public void test() {
throw new NullPointerException();
}
10. @RequiredArgsConstructor
作用在类上
为类生成所有带有final或者@Nonnull注解属性的构造方法
例如:
@RequiredArgsConstructor
public class Test {
@NonNull
private int a;
final String B;
private int c;
}
等同于
public class Test {
@NonNull
private int a;
final String B;
private int c;
Test(int a,String B){
this.a = a;
this.B = B;
}
}
11. @Synchronized
作用在方法上
与synchronized作用一样,默认静态方法使用的是全局锁,普通方法使用的是对象锁,可以指定锁的对象。
例如:
public class Test {
@Synchronized
public void test() {
System.out.println(".....");
}
}
等同于
public class Test {
public void test() {
synchronized (this) {
System.out.println(".....");
}
}
}