Lombok是我所有微服务都默认依赖的一个库。Spring还将Lombok作为开发工具在Spring初始化器中支持。
照片由 Josh Bean 拍摄,图片来自 Unsplash
Lombok 比传统方法有哪些优点Lombok是由Remko Popma和Dave Syer创建的。它是一个开源项目,由于它能通过减少样板代码来简化Java编程,因此在Java社区中被广泛采用。Lombok的易用性和与包括Spring在内的多种Java框架的集成,因此它变得越来越受欢迎。
- 减少样板代码:Lombok 消除了如 getter、setter、构造函数和
toString()
等重复的代码,使你可以编写更少的代码并专注于业务逻辑。 - 提高可读性:通过减少样板代码的量,Lombok 使你的类更容易阅读和理解。
- 确保一致性:Lombok 自动生成一致的 getter、setter 和其他方法代码,确保这些方法遵循最佳实践而不需要手动干预。
- 加快开发速度:利用 Lombok 的注解,你可以迅速配置你的类而无需手动编写重复代码,从而加快开发速度。
- 减少人为错误:通过自动生成样板代码,Lombok 减少在编写这些方法时的人为错误,从而导致更少的 bug。
- 可定制的代码生成:Lombok 允许你通过各种注解和选项来自定义生成的代码,提供了生成代码的灵活性,使得开发更加灵活。
**@Getter**
:生成所有字段的 getter 方法。**@Setter**
:生成所有字段的 setter 方法。**@ToString**
:生成toString()
方法。**@EqualsAndHashCode**
:生成equals()
和hashCode()
方法。**@AllArgsConstructor**
:生成一个包含所有字段的构造函数。**@NoArgsConstructor**
:生成一个无参构造函数。**@RequiredArgsConstructor**
:为最终字段和非空字段生成构造函数。**@Data**
:结合@Getter
、@Setter
、@ToString
、@EqualsAndHashCode
和@RequiredArgsConstructor
生成数据类。**@Value**
:创建一个不可变类(包含所有字段的构造函数、@Getter
、@ToString
和@EqualsAndHashCode
)。**@Builder**
:生成一个构建器模式的实现,用于创建对象。**@Singular**
:与@Builder
结合使用,处理单个集合。**@Delegate**
:将方法委托给另一个对象,以简化代码。**@Slf4j**
:使用 SLF4J 提供一个日志实例。
**14. @Log**
: 提供一个使用 java.util.logging
的日志记录器实例。
**15. @Log4j**
使用 Log4j 创建一个日志记录器。
**16. @NonNull**
:为参数或字段生成非空检查。
再来一个 — @SneakyThrows
Lombok:一个不断带来惊喜的礼物。让我们来探讨 @SneakyThrows 确实是一个巧妙的 Lombok 特性,它提供了一个绕过 Java 受检异常的方法!!medium.com Java 代码示例 —我们以 User 这个实体为例。传统上,它的实体类会是这样的。
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
private String password;
// 不含参数的构造函数
public User() {}
// 全参数构造函数
public User(Long id, String username, String email, String password) {
this.id = id;
this.username = username;
this.email = email;
this.password = password;
}
// 获取器方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// 用于字符串表示的方法
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", email='" + email + '\'' +
", password='" + password + '\'' +
'}';
}
// 用于对象比较的方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return id != null ? id.equals(user.id) : user.id == null;
}
// 用于散列值计算的方法
@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
}
但是,利用LOMBOK,事情会变成这样——
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Builder;
import lombok.NonNull;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NonNull
private String username;
@NonNull
private String email;
private String password;
// 这里可以添加一些额外的业务逻辑或方法
}
搞定啦!!!我们已经移除了样板代码。(即使大多数这类代码可以通过标准IDE自动生成。)我们让实体类变得简洁。这不正是现代Java开发所追求的吗?
我们将在接下来的文章里更详细地看看其中一些标注 :)
你可以在这里看看关于 Records vs Lombok 的内容
模板之争:Records vs. Lombok Lombok已经存在了十几年了,我们需要决定是否要替换由Lombok生成的…点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦