Skip to content

Commit 09eb06d

Browse files
committed
使用 Lombok 进行优雅的编码
1 parent 43f0abf commit 09eb06d

1 file changed

Lines changed: 126 additions & 0 deletions

File tree

docs/tool/tool-Lombok.md

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
---
2+
title: 如何使用 Lombok 进行优雅的编码
3+
date: 2018-12-30 00:08:10
4+
url: develop/tool-Lombok
5+
tags:
6+
- Lombok
7+
- 开发工具
8+
categories:
9+
- 生产工具
10+
---
11+
12+
Project Lombok 是一个 java 库,它可以通过注解自动为你要编写的类添加相应功能,如 get/set 方法,提高了开发效率。
13+
14+
引入 POM 依赖。
15+
16+
```xml
17+
<!-- Lombok核心依赖 -->
18+
<dependency>
19+
<groupId>org.projectlombok</groupId>
20+
<artifactId>lombok</artifactId>
21+
<version>1.18.4</version>
22+
<scope>provided</scope>
23+
</dependency>
24+
<!-- 添加logback日志框架支持,(可有可无) -->
25+
<dependency>
26+
<groupId>ch.qos.logback</groupId>
27+
<artifactId>logback-classic</artifactId>
28+
<version>1.0.6</version>
29+
</dependency>
30+
```
31+
<!-- more -->
32+
33+
查看依赖关系可以发现 `logback-classic` 依赖了 `SLF4J-API` 日志门面以及 l`ogback-core` 日志实现框架。
34+
35+
![添加的pom依赖](https://cdn.jsdelivr.net/gh/niumoo/cdn-assets/2019/1544414938730.png)
36+
关于日志注解的选择,可以参考[官方文档](https://www.projectlombok.org/features/log)。默认的日志输出注释类为被注释的类路径,也可以使用 topic 参数自定义,如`@Slf4j(topic="reporting")`. 一般我们都会选择 `@Slf4j` 这个日志抽象类。在使用这个注解的时候需要导入 SLF4-API 抽象层以及具体的日志实现框架,上方的依赖中我们已经添加了日志依赖。
37+
38+
```java
39+
@CommonsLog
40+
Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
41+
@Flogger
42+
Creates private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass();
43+
@JBossLog
44+
Creates private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
45+
@Log
46+
Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
47+
@Log4j
48+
Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
49+
@Log4j2
50+
Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
51+
@Slf4j
52+
Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
53+
@XSlf4j
54+
Creates private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
55+
```
56+
`Lombok` 的使用主要是几个注解,下面介绍常用的几个注解。
57+
58+
`@Getter/@Setter` 为属性生成 get 和 set 方法。
59+
60+
`@ToString` 生成 toString 方法,输出各个属性值。
61+
62+
`@EqualsAndHashCode` 生成 equals 和 hashCode 方法。
63+
64+
`@NoArgsConstructor` 生成无惨构造器。
65+
66+
`@AllArgsConstructor` 生成全参数构造器。
67+
68+
`@Data` 是一个方便注解,它捆绑了 `@ToString` `@Getter/@Setter` `@EqualsAndHashCode` 以及 `@RequiredArgsConstructor`.
69+
70+
根据上面的解释,用下面的一个例子演示用法。
71+
72+
```java
73+
import lombok.*;
74+
import lombok.extern.slf4j.Slf4j;
75+
76+
/**
77+
* <p>
78+
* Lombok使用
79+
*
80+
* @Author niujinpeng
81+
* @Date 2018/12/10 11:05
82+
*/
83+
@Slf4j(topic = "Lombok")
84+
public class LombokTest {
85+
86+
public static void main(String[] args) {
87+
Person person1 = new Person();
88+
person1.setName("Darcy");
89+
person1.setAge(22);
90+
person1.setTeacher(true);
91+
log.info(person1.toString());
92+
93+
Person person2 = new Person("Darcy", 22, true);
94+
log.info(person2.toString());
95+
96+
boolean equals = person1.equals(person2);
97+
log.info("Equals:" + equals);
98+
log.info(person1.hashCode() + " and " + person2.hashCode());
99+
}
100+
}
101+
102+
//@Getter
103+
//@Setter
104+
//@ToString
105+
//@EqualsAndHashCode
106+
@Data
107+
@NoArgsConstructor
108+
@AllArgsConstructor
109+
class Person {
110+
private String name;
111+
private Integer age;
112+
private boolean isTeacher;
113+
}
114+
```
115+
116+
可以看到 Person 类除了几个属性定义之外没有其他任何方法代码,运行 LombokTest 可以在控制台看到输出如下。
117+
118+
```log
119+
12:12:57.687 [main] INFO Lombok - Person(name=Darcy, age=22, isTeacher=true)
120+
12:12:57.690 [main] INFO Lombok - Person(name=Darcy, age=22, isTeacher=true)
121+
12:12:57.690 [main] INFO Lombok - Equals:true
122+
12:12:57.690 [main] INFO Lombok - 1423350487 and 1423350487
123+
124+
Process finished with exit code 0
125+
```
126+

0 commit comments

Comments
 (0)