安装lombok
引入jar包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
在idea中安装lombok插件。
使用lombok
lombok会根据所添加的注解,在编译期自动生成Bean类的通用代码(构造器,Getter,Setter等)
@Getter
与 @Setter
生成Getter与Setter方法
@ToString
自动重写toString()方法
@EqualsAndHashCode
自动重写equals()与hashCode()方法
@NonNull
被注解的字段不能为null
@RequiredArgsConstructor
自动生成需要的构造器:默认生成无参构造器;如果有字段被 @NonNull
注解,则生成非空字段构造器
例如
@RequiredArgsConstructor
public class User
{
@NonNull
private String username;
@NonNull
private String password;
private int age;
}
将生成以下构造器
public User(@NonNull String username,@NonNull String password)
{
this.username = username;
this.password = password;
}
@NoArgsConstructor
自动生成无参构造器
@AllArgsConstructor
自动生成全参构造器
@Data
最方便的注解,等价与同时使用了 @Getter
@Setter
@RequiredArgsConstructor
@ToString
@EqualsAndHashCod
这些注解
@Cleanup
自动关闭资源
public void f()
{
try
{
@Cleanup
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(new byte[]{'Y','e','s'});
System.out.println(baos.toString());
}
catch(IOException e)
{
e.printStackTrace();
}
}
等价于
public void f()
{
try
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try
{
baos.write(new byte[]{'Y','e','s'});
System.out.println(baos.toString());
}
finally
{
baos.close();
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
@Synchronized
自动将方法中的代码转换为同步代码块
@Synchronized
public void f()
{
// TODO
}
等价于
private final java.lang.Object $lock = new java.lang.Object[0];
public void f()
{
synchronized($lock)
{
// TODO
}
}
@SneakyThrows
用来注解构造器和方法,可以不用手动声明方法声明上的throws语句
@SneakyThrows
public void f()
{
throw new IllegalAccessException();
}
@Slf4j
会自动创建一个叫log的Logger对象,等价于以下代码
private static final Logger log= LoggerFactory.getLogger(User.class);
使用lombok注意事项
如果多个Bean类互相依赖,使用Lombok会循环引用,导致栈溢出。这时,需要手动实现相关方法。