lombok是一个简化开发的一个包,先引入maven依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
一、使用场景:创建标准javabean
在传统针对一个实体类写javabean,需要写对应的get ,set,和构造器,toString hashcode等,很繁琐以及不方便阅读,如果没有特殊需求,则可以使用lombok提供的注解,来完成 标准 javabean的生成
package com.dongmianmao.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.sql.Date;
@Data // 创建对应的get set 和重写 toString equal 等方法
@NoArgsConstructor // 创建空参构造
@AllArgsConstructor // 创建带参构造
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
}
可以看到,在类名上引用了三个注解,就完成了标准javabean的创建
二、使用场景:logback中logger对象频繁创建的繁琐
在引入日志框架logback后,需要频繁的创建logger对象,来获得日志框架对象,在引入lombok后,就可以省略频繁创建的繁琐,更高效的使用日志记录框架,前提:引入logback框架所需的依赖以及xml配置
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
@Slf4j
public class JsonTest {
@Test
public void slf4jTest(){
log.info("这是用lombok注解记录的一条info日志");
}
}
- 使用 @Slf4j,来创建logger对象
- 注解创建的对象名为 log 使用这个对象名就可以使用logback的功能了,省去了创建对象的操作
三、使用场景:频繁使用 类名.close() 来关闭资源,或者使用 try - wish - catch的方式来关闭资源
@Test
public void testAddUser(){
String resource = "mybatis-config.xml";
InputStream is = this.getClass().getClassLoader().getResourceAsStream(resource);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
@Cleanup // 使用这个注解来关闭资源
SqlSession sqlSession = ssf.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
System.out.println(mapper.addUser(new User(null, "小红", new Date(System.currentTimeMillis()), "女", " 花果山水帘洞")));
sqlSession.commit();
}
在需要关闭资源的Object上使用 @CleanUp 来关闭资源
四、使用场景:方法参数非空
// 简化
public void getName(@NotNull int num){
System.out.print(num);
}
// 未简化
public void getNume(int num){
if(num == null) throws new NullPointerException();
System.out.print(num);
}
使用 @NotNull 注解,来指定参数不能为空
五、使用场景:自动寻找类型的变量和常量
在lombok中,定义了两个属性,来简化对象类型的书写
@Test
public static void test(){
var name = "张三";
val birthday = "2005-10-12";
}
- var -> 用来定义变量,来自动寻找类型给变量赋上
- val -> 用来定义常量,来自动寻找类型给常量赋上
六、使用场景:链式创建对象
先有一个对象类,为user,这里设以及存在对应的构造,get和set方法
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String username;
}
在以往创建对象
User user = new User(1,"张三");
// 或者
User user = new User();
user.setId(1);
user.setName("张三");
而如果使用lombok自带的注解后,先改造一下对象,是在对象这加注解
@Data
@Builder
public class User {
private Integer id;
private String username;
}
在类头顶加上 ==@Builder ==注解,此时创建对象就变成了
Student.builder()
.id(12)
.username("zhangsan");
使用 类名.builder() 的方式来创建对象,而后面使用 .成员变量 的方式赋值,称为链式调用创建对象
七、使用场景:委托方法给当前类
关于这个,像是代理,把当前引用注解的类作为被代理类,然后把当前类变成代理类,来使用被代理类的方法
public class JsonTest {
@Delegate
List list = new ArrayList();
@Test
public void jsonTest(){
JsonTest jsonTest = new JsonTest();
jsonTest.add(123);
System.out.println(jsonTest);
}
}
运行上面代码,可以让jsonTest这个类,能够使用ArrayList的方法
使用 @Delegate 注解 ,把写在成员变量的对象,代理给当前类,让当前类能够使用被代理类的功能