Lombok是一个Java库,它通过注解的方式来简化Java代码的编写,减少样板代码(boilerplate code)的重复,提高代码的可读性和可维护性。本文将介绍Lombok库中常用的注解及其用法。
添加依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
1. @Getter和@Setter
@Getter和@Setter是Lombok中最常用的注解之一,它们用于自动生成Java Bean类的Getters和Setters方法。使用这两个注解可以减少代码量,提高代码的可读性和可维护性。
使用方式:
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
}
注解的作用:
在上面的代码中,我们使用了@Getter和@Setter注解来自动生成User类的Getters和Setters方法,这样我们就可以通过下列代码来访问User类的属性:
User user = new User();
user.setName("Tom");
user.setAge(20);
System.out.println(user.getName());
System.out.println(user.getAge());
2. @ToString
@ToString注解可以自动生成toString方法。这个方法可以将一个对象的属性转换成一个字符串,方便输出调试信息。
使用方式:
import lombok.ToString;
@ToString
public class User {
private String name;
private int age;
}
注解的作用:
在上面的代码中,我们使用了@ToString注解来自动生成User类的toString方法,这样我们就可以通过下列代码来输出User对象的属性:
User user = new User();
user.setName("Tom");
user.setAge(20);
System.out.println(user);
输出结果为:
User(name=Tom, age=20)
3. @EqualsAndHashCode
@EqualsAndHashCode注解可以自动生成equals和hashCode方法。这个方法可以用来比较两个对象是否相等。
使用方式:
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class User {
private String name;
private int age;
}
注解的作用:
在上面的代码中,我们使用了@EqualsAndHashCode注解来自动生成User类的equals和hashCode方法,这样我们就可以通过下列代码来比较两个User对象是否相等:
User user1 = new User();
user1.setName("Tom");
user1.setAge(20);
User user2 = new User();
user2.setName("Tom");
user2.setAge(20);
System.out.println(user1.equals(user2));
输出结果为:
true
4. @NoArgsConstructor和@AllArgsConstructor
@NoArgsConstructor和@AllArgsConstructor注解可以自动生成无参构造方法和全参构造方法。
使用方式:
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private int age;
}
注解的作用:
在上面的代码中,我们使用了@NoArgsConstructor和@AllArgsConstructor注解来自动生成User类的无参构造方法和全参构造方法,这样我们就可以通过下列代码来创建User对象:
User user1 = new User();
User user2 = new User("Tom", 20);
5. @Data
@Data注解可以自动生成Getter、Setter、equals、hashCode和toString方法,相当于同时使用了@Getter、@Setter、@EqualsAndHashCode和@ToString注解。
使用方式:
import lombok.Data;
@Data
public class User {
private String name;
private int age;
}
注解的作用:
在上面的代码中,我们使用了@Data注解来自动生成User类的Getter、Setter、equals、hashCode和toString方法,这样我们就可以通过下列代码来访问User类的属性、比较两个User对象是否相等以及输出User对象的属性:
User user1 = new User();
user1.setName("Tom");
user1.setAge(20);
User user2 = new User();
user2.setName("Tom");
user2.setAge(20);
System.out.println(user1.equals(user2));
System.out.println(user1.toString());
输出结果为:
true
User(name=Tom, age=20)
6. @Builder
@Builder注解可以自动生成Builder模式的代码。Builder模式是一种创建对象的设计模式,它可以让我们更加灵活地创建对象,同时也可以提高代码的可读性和可维护性。
使用方式:
import lombok.Builder;
@Builder
public class User {
private String name;
private int age;
}
注解的作用:
在上面的代码中,我们使用了@Builder注解来自动生成User类的Builder模式的代码,这样我们就可以通过下列代码来创建User对象:
User user = User.builder()
.name("Tom")
.age(20)
.build();
7. @Slf4j
@Slf4j注解可以自动生成日志记录代码。日志记录是一种常用的调试和错误处理方法,它可以帮助我们更好地了解程序的运行情况。
使用方式:
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class User {
private String name;
private int age;
public void hello() {
log.info("Hello, {}!", name);
}
}
注解的作用:
在上面的代码中,我们使用了@Slf4j注解来自动生成User类的日志记录代码,这样我们就可以通过下列代码来记录User对象的hello方法的调用情况:
User user = new User();
user.setName("Tom");
user.hello();
输出结果为:
INFO User:9 - Hello, Tom!
总结
Lombok是一个非常实用的Java库,它可以帮助我们简化Java代码的编写,减少样板代码的重复,提高代码的可读性和可维护性。本文介绍了Lombok中常用的注解及其用法,包括@Getter、@Setter、@ToString、@EqualsAndHashCode、@NoArgsConstructor、@AllArgsConstructor、@Data、@Builder和@Slf4j。通过学习这些注解,我们可以更加高效地编写Java代码。
Lombok 的 @Log
系列注解
为了解决这个问题,Lombok 提供了 @Log
系列注解,用于自动创建并初始化日志记录器。这一系列注解包括:@Log
, @Log4j
, @Log4j2
, @Slf4j
, @JBossLog
等,对应于不同的日志框架。每个注解都会在编译时生成一个名为 log
的静态字段,该字段被初始化为对应的日志框架的 Logger 实例。
下面,我们使用 @Log4j
重写之前的例子:
import lombok.extern.log4j.Log4j;
@Log4j
public class LogExample {
public void doSomething() {
// 直接使用 log 记录日志
log.info("This is an information message.");
log.error("This is an error message.");
}
}
你可以看到,使用 @Log4j
后,我们的代码变得更简洁了。我们不再需要手动创建和初始化 Logger 对象,而是直接使用 Lombok 自动生成的 log
对象。
如何选择合适的 @Log
注解?
实际企业级开发中,推荐使用 @Slf4j
注解。 SLF4J 是一个抽象的日志框架,它可以在运行时绑定到具体的日志实现(例如 Logback、Log4j2 等),也就是说,使用这个注解,可以无需管项目中具体使用的日志框架是啥,它会动态检测,使用起来也更加友好。
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LogExample {
public void doSomething() {
// 直接使用 log 记录日志
log.info("This is an information message.");
log.error("This is an error message.");
}
}