Lombok使用总结
Lombok简介
Lombok 是一种Java实用工具,目的是消除JavaBean中冗余代码,比如getter/setter、toString、hashCode等等,通过注解达到相同目的;
Lombok原理
源文件编译生成class文件时,根据注解生成对应的字节码;
使用步骤
1. 添加maven依赖
非SpringBoot环境
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
<optional>true</optional>
</dependency>
SpringBoot环境
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
说明:option设为true是为了避免传递依赖;
2. IDE安装lombok插件
常用注解
@Getter/@Setter
用法: 作用在类上和属性上。放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。
java源文件如下:
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class User {
private String name;
public static void main(String[] args) {
User user = new User();
user.setName("name");
}
class文件反编译后如下:
public class User {
private String name;
public User() {
}
public static void main(String[] args) {
User user = new User();
user.setName("name");
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
@UtilityClass
用法: 作用在类上;
作用: 构造函数私有以及使用final修饰类;
源文件
@UtilityClass
public class JavaUtils {
public static String getName() {
return "name";
}
public static void main(String[] args) {
System.out.println(JavaUtils.getName());
}
class文件反编译后:
public final class JavaUtils {
public static String getName() {
return "name";
}
public static void main(String[] args) {
System.out.println(getName());
}
private JavaUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
}
@ToString
用法: 作用在类上
作用: 生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。
@EqualsAndHashCode
用法: 作用在类上
作用: 默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。
@Data
用法: 作用在类上
作用: 包含@ToString, @EqualsAndHashCode, 所有属性的@Getter, 所有non-final属性的@Setter和@RequiredArgsConstructor的组合,通常情况下,基本上使用这个注解就足够了。
@Log
用法: 作用在类上
作用: 创建log属性
@Setter
@Getter
@ToString
@Log
public class User {
private String name;
public static void main(String[] args) {
User user = new User();
user.setName("name");
log.info(user.toString());
}
}
public class User {
private static final Logger log = Logger.getLogger(User.class.getName());
private String name;
public User() {
}
public static void main(String[] args) {
User user = new User();
user.setName("name");
log.info(user.toString());
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public String toString() {
return "User(name=" + this.getName() + ")";
}
}
参考: