lombok是怎么用的
lombok
Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或equals方法,同时可以自动化日志变量。用大白话来讲,Lombok可以通过几个注释在编译的时候为我们的JavaBean动态的生成get,set,tostring,无参构造方法,全参数构造方法,基于builder的创建方式。
在[上一节](用一个项目把控制层、业务层、持久层说明白了,每一句话都讲的很清楚 - ivanlee717 - 博客园)在我们定义一个实体类的时候,会用快捷方法生成了很多方法,但是这种代码我们可以直接通过几个简单的注解完成。
lombok安装
<!--Lombok引入-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
lombok原理
Lombok的基本实现原理可以概括为以下几个步骤:
- 注解扫描:Lombok的注解处理器会扫描Java源代码中的注解,并找到使用了Lombok注解的类、字段和方法。
- AST操作:Lombok注解处理器会对注解所标注的类进行抽象语法树(AST)的解析和操作,以识别和处理这些注解。
- 注解解析:注解处理器解析找到的注解,确定需要生成的代码类型和内容。
- 代码生成:基于注解的定义和规则,Lombok注解处理器生成相应的代码片段,如getter和setter方法、构造函数等。
- 代码注入:生成的代码片段被插入到编译结果中的相应位置,与手动编写的代码合并在一起。
- 最终编译:编译器将生成的代码和手动编写的代码一起编译为最终的字节码文件。
普通的java程序运行原理如上图所示,但是lombok会作为一个插件帮助用户代码更简洁
lombok注解
注解 | 注解作用 |
---|---|
@Getter | 自动生成getter方法 |
@Setter | 自动生成Setter方法 |
@ToString | 自动生成tostring方法 |
@EqualsAndHashCode | 自动生成equals和hashCode方法 |
@NoArgsConstructor | 自动生成无参构造函数 |
@AllArgsConstructor | 自动生成包含所有字段的构造函数 |
常用的组合注解有
注解 | 注解作用 |
---|---|
@Data | 组合了@Getter、@Setter、@ToString、@EqualsAndHashCode等注解的功能 |
@Value | 组合了@Getter、@ToString、@EqualsAndHashCode等注解的功能 |
@Data注解和@Value注解有哪些区别?
@Data生成的类是可变的,具有可读写的setter方法,@Value生成的类是不可变的,字段是final的,没有生成setter方法。
Lombok日志注解:
注解 | 注解作用 |
---|---|
@Slf4j | 自动生成一个名为log的日志记录器 |
其他注解用的不多,先提一下
注解 | 注解作用 |
---|---|
@Builder | 自动生成Builder模式的构造器方法 |
@NonNull | 自动生成非空检查 |
@Delegate | 自动生成委托方法 |
@Cleanup | 自动释放资源 |
代码实现
直接设置这三个注解就帮助我们搞定了很多冗余的代码,现在写一个测试方法
@Test
public void lombok(){
User user = new User();
user.setUsername("test");
user.setPassword("1234");
user.setGender(1);
user.setCreateUser(user.getUsername());
user.setModifiedUser(user.getUsername());
Date date = new Date();
user.setCreateTime(date);
user.setModifiedTime(date);
System.out.println(user.toString());
}
上述过程也可以直接使用@Data解决。
如果在定义实体的时候使用@builder,可以在声明一个实例的时候运用以下写法
User user = User.builder()
.uid(1)
.username("1234")
.password("5678")
.gender(0)
.email("kxcnsakdn").build();
System.out.println(user.toString());
本文来自博客园,作者:ivanlee717,转载请注明原文链接:https://www.cnblogs.com/ivanlee717/p/18574675