Lombok是啥?
一個java庫,一個構(gòu)建工具。通過簡單的注解來實現(xiàn)精簡代碼,消除冗長代碼和提高開發(fā)效率的目的。
為啥要使用Lombok
大家在寫bug的時候,肯定和很多的實體打過交道,然后我們要寫getter()、setter()、toString()等等。
不,我們不用寫,不管是idea還是eclipse都有快捷鍵給我們生成getter()、setter()。所以我們還是能很快的開發(fā)。
可是還是有下面的一些問題:
- 眾多的
getter()、setter(),占據(jù)整個類,影響代碼的可讀性。如果我們開發(fā)將字段穿插在getter()、setter()之間呢?
public class User {
/** id */
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/** 姓名 */
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
上面和下面的,很明顯下面的更直觀,一目了然
public class User {
/** id */
private Long id;
/** 姓名 */
private String name;
}
- 我們新增一個字段,那么我們就要新增對應(yīng)的
getter()、setter(),修改toString()等等; - 我們刪除一個字段,要把對應(yīng)的getter()、setter()刪除,修改toString()等等;
- 我們修改一個字段的類型,比如
Integer修改成String。那我們要刪除getter()、setter()先,然后生成getter()、setter(),再修改toString()等等。 - 如果一個實體有很多的屬性字段,那么修改其中一個,定位不容易。
- 如果我們想用流式風(fēng)格創(chuàng)建對象,又要寫一堆代碼。
- 如果我們想生成帶所有參數(shù)的構(gòu)造器,又如何?
Lombok能解決上面所有的問題,只需要幾個注解即可。
Lombok安裝
IntelliJ IDEA
- Lombok插件安裝
File → Settings... → Plugins → Browse repositories → 搜索Lombok → 安裝插件 。
具體可參考下圖:


安裝完畢,重啟idea,那我們就安裝好Lombok插件了
- 引入jar包
插件安裝完畢,我們只要在對應(yīng)的項目中引入jar包,就可以愉快的開發(fā)了。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
</dependency>
Lombok注解
@Data
這個注解會幫我們生成getter、setter、equals、hashCode、toString等方法。可以說很強大了。

@Getter、@Setter
這兩個注解就是分別生成我們的getter和setter。可以放在類或者屬性上
- 放在類上,所有屬性都生成getter和setter
- 放在屬性上,只有對應(yīng)的屬性生成getter和setter
@ToString
在類上使用,生成toString()方法。
@ToString(of = {"id", "name"})
指定包含的屬性@ToString(exclude = {"id", "name"})
指定排除的屬性@ToString(callSuper = true)
輸出父類的屬性
@EqualsAndHashCode
在類上使用,生成equals和hashcode方法
@Slf4j
我們開發(fā)的時候,很多時候都是要記錄日志的,便于以后的問題排查。經(jīng)常要寫類似于下面的代碼。
private static final Logger log = LoggerFactory.getLogger(User.class);
@Slf4j幫我們自動生成這行代碼。在類上使用
@NoArgsConstructor
生成無參構(gòu)造器
@AllArgsConstructor
生成帶所有屬性的構(gòu)造器,不生成默認的無參構(gòu)造器
@Builder
用于類上,生成流式API。當我們創(chuàng)建新的對象時,會使我們的代碼更優(yōu)雅。
User user = new User();
user.setId(1L);
user.setName("roach");
user.setGender(1);
user.setBirthday(new Date());
user.setAge(18);
// 流式方式設(shè)置屬性值
User user1 = User.builder()
.id(1L)
.name("roach")
.gender(1)
.birthday(new Date())
.age(18)
.build();