您好,登录后才能下订单哦!
# 如何使用Lombok注解
## 一、Lombok简介
### 1.1 什么是Lombok
Lombok是一个Java库,通过注解的方式自动生成Java代码(如getter/setter、构造函数、equals等),帮助开发者减少样板代码的编写。它通过编译时注解处理器实现,不会影响运行时性能。
### 1.2 核心优势
- **减少样板代码**:自动生成常见方法
- **提升可读性**:使类定义更简洁
- **维护方便**:字段变更时自动同步相关方法
- **编译时处理**:不增加运行时开销
## 二、环境配置
### 2.1 安装步骤
#### IDE插件安装
- IntelliJ IDEA:通过插件市场安装"Lombok Plugin"
- Eclipse:下载[lombok.jar](https://projectlombok.org)运行安装
#### Maven依赖
```xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
<scope>provided</scope>
</dependency>
compileOnly 'org.projectlombok:lombok:1.18.28'
annotationProcessor 'org.projectlombok:lombok:1.18.28'
创建测试类并使用@Data
注解,编译后查看是否自动生成方法。
功能:复合注解(包含@ToString
、@EqualsAndHashCode
、@Getter
/@Setter
、@RequiredArgsConstructor
)
@Data
public class User {
private Long id;
private String username;
private final String registerDate;
}
功能:创建不可变类(所有字段私有final,只生成getter)
@Value
public class ImmutablePoint {
int x;
int y;
}
功能:实现建造者模式
@Builder
public class Product {
private String name;
private double price;
}
// 使用方式
Product.builder().name("Laptop").price(5999.99).build();
配置选项:
- value
:访问修饰符(默认PUBLIC)
- onMethod
:在方法上添加额外注解
@Getter(value = AccessLevel.PROTECTED)
@Setter
private String email;
重要参数:
- exclude
:排除字段
- callSuper
:是否包含父类字段
@ToString(exclude = "password", callSuper = true)
public class Admin extends User {
private String role;
}
注意:需要无参构造时配合@AllArgsConstructor
使用
特点:只为final字段和@NonNull
字段生成构造
@RequiredArgsConstructor
public class Order {
private final Long id;
@NonNull
private Customer customer;
}
支持日志框架: - SLF4J - Log4j - JUL等
@Slf4j
public class Service {
public void process() {
log.info("Processing started...");
}
}
用途:静默抛出受检异常
@SneakyThrows(IOException.class)
public String readFile() {
return Files.readString(Path.of("test.txt"));
}
lombok.config
# 全局配置
lombok.anyConstructor.addConstructorProperties=true
lombok.equalsAndHashCode.callSuper=call
# 包级配置
config.stopBubbling = true
用途:创建不可变对象的修改副本
@With
@AllArgsConstructor
public class Point {
private int x, y;
}
Point p1 = new Point(1, 2);
Point p2 = p1.withX(10); // 新对象
链式调用配置:
@Accessors(chain = true)
@Setter
public class ChainExample {
private String name;
}
// 使用方式
new ChainExample().setName("A").setName("B");
-Dlombok.debug=true
参数调试@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
@Id
@GeneratedValue
private Long id;
private String name;
}
@Mapper
public interface UserMapper {
@Mapping(target = "fullName", source = "name")
UserDto toDto(User user);
}
解决方案:
@Data
@NoArgsConstructor
public class SerializableModel implements Serializable {
private static final long serialVersionUID = 1L;
private String data;
}
Lombok通过精简代码显著提升开发效率,但需要注意: 1. 新团队成员需要学习成本 2. 过度使用可能导致代码可读性下降 3. 在复杂业务逻辑中仍需手动实现关键方法
推荐组合:
- 实体类:@Data
+ @Builder
+ @NoArgsConstructor
- 工具类:@UtilityClass
- 配置类:@Value
+ @Builder
官方文档参考:Project Lombok “`
注:本文实际约2500字,完整版可扩展以下内容: 1. 具体示例对比(有无Lombok的代码对比) 2. 与Records的异同分析 3. 自定义注解处理器开发 4. 团队规范制定建议
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。