1.1 lombok介绍
lombok是一个开源的代码生成库,能以简单的注解形式来简化Java类中的大量样板代码,提高开发人员的开发效率。例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量。
lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法,使代码看起来更简洁。
lombok对应的maven坐标:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
1.2 安装lombok插件
要使用lombok需要在IDE中安装对应的lombok插件。本课程使用的开发工具为IntelliJ IDEA,安装插件过程如下:
1、打开IntelliJ IDEA后点击菜单栏中的File-->Settings进入到设置页面
2、点击设置页面中的Plugins进行插件的安装,在右侧选择Browse repositories...,然后在搜索页面输入lombok,可以查询到下方的Lombok Plugin,鼠标点击Lombok Plugin可在右侧看到Install按钮,点击该按钮便可安装
1.3 lombok常用注解
注解 | 说明 |
---|---|
@Setter | 注解在类或属性,注解在类时为所有属性生成setter方法,注解在属性上时只为该属性生成setter方法 |
@Getter | 使用方法同@Setter,区别在于生成的是getter方法 |
@ToString | 注解在类,添加toString方法 |
@EqualsAndHashCode | 注解在类,生成hashCode和equals方法 |
@NoArgsConstructor | 注解在类,生成无参的构造方法 |
@RequiredArgsConstructor | 注解在类,为类中需要特殊处理的属性生成构造方法,比如final和被@NonNull注解的属性 |
@AllArgsConstructor | 注解在类,生成包含类中所有属性的构造方法 |
@Data | 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法 |
@Slf4j | 注解在类,生成log变量,用于记录日志 |
@Builder | 将类转变为建造者模式 |
1.4 lombok入门案例
第一步:创建maven工程lombok_demo并配置pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itcast</groupId>
<artifactId>lombok_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
</dependencies>
</project>
第二步:创建User类并加入lombok提供的注解
package cn.itcast.entity;
import lombok.*;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
private int age;
}
第三步:创建测试类TestLombok
package cn.itcast;
import cn.itcast.entity.User;
public class TestLombok {
public static void main(String[] args) {
//无参构造方法
User user1 = new User();
/*
setter方法
*/
user1.setId(1);
user1.setName("itcast");
user1.setAge(18);
/*
getter方法
*/
int id = user1.getId();
String name = user1.getName();
int age = user1.getAge();
//带有所有参数的构造方法
User user2 = new User(2,"itheima",20);
//建造者模式
User user3 = User.builder().id(3).name("boxuegu").age(22).build();
/*
toString方法
*/
System.out.println(user1.toString());
System.out.println(user2.toString());
System.out.println(user3.toString());
}
}
注:可以使用反编译工具查看生成的class文件内容