天天看點

SpringBoot使用Lombok簡化開發

1. 場景

都說咧,Spring Boot就是為簡化Spring開發而生,Boot麼,快速啟動,哪裡不夠快,就幹倒它!這不是口号,Spring Boot就是這麼幹哩。

那現在仔細瞅瞅,我們的項目還有什麼重複代碼?毫無技術含量,都是簡單的邏輯重複。看看我們的資料對象DO

/**

* 部落格類

*/

public class BlogDo {

/**

 * 序号

 */

private Long id;

 * 标題

private String title;

 * 内容

private String content;

public Long getId() {

 return id;

}

public void setId(Long id) {

 this.id = id;

public String getTitle() {

 return title;

public void setTitle(String title) {

 this.title = title;

public String getContent() {

 return content;

public void setContent(String content) {

 this.content = content;

}

有沒有發現get/set方法,完全是固定模式的,隻要屬性名确定了,方法怎麼寫也就确定了。

而且我們平時寫的時候,一般也不用自己手寫,直接利用開發工具生成就行。既然是模闆代碼,何必浪費手工生成的時間。

使用Lombok,即可幫我們自動生成get/set模闆代碼,而且它還能做到更多!

2. 安裝Lombok

首先下載下傳lombok jar包,點此打開下載下傳頁

點選圖中jar下載下傳即可

SpringBoot使用Lombok簡化開發

下載下傳之後輕按兩下打開,點選

Specify Location

然後選擇eclipse安裝目錄下的eclipse.exe,然後點選Install即可。

注意安裝完了需要重新開機下eclipse。

SpringBoot使用Lombok簡化開發

3. 引入Lombok

安裝完了還需要引入Lombok,哈哈,針對開發工具安裝一次就夠了,然後每個項目需要單獨引入lombok依賴,如下所示,注意無須指定版本,因為SpringBoot2.2.5已經有預設關聯的lombok版本了,當然你手工指定也OK。

 <!-- 添加lombok相關功能 -->

 <dependency>

  <groupId>org.projectlombok</groupId>

  <artifactId>lombok</artifactId>

  <scope>provided</scope>

 </dependency>

4. 看看Lombok實作了啥功能

看注釋,get/set/toString/equals/hashCode這些常用的都給我們生成了,簡直太友善了!

@Data // 通過@Data注解為該類啟用Lombok功能

 * 測試入口

public static void main(String[] args) {

 BlogDo blog = new BlogDo();

 // 自動生成了set方法

 blog.setId(1L);

 blog.setTitle("測試部落格");

 blog.setContent("測試内容");

 // 自動生成了get方法

 System.out.println(blog.getId());

 System.out.println(blog.getTitle());

 System.out.println(blog.getContent());

 // 自動生成了toString(),列印所有屬性

 System.out.println(blog);

 // 自動生成了equals方法

 BlogDo otherBlog = new BlogDo();

 otherBlog.setId(1L);

 otherBlog.setTitle("測試部落格");

 otherBlog.setContent("測試内容");

 System.out.println(blog.equals(otherBlog));// 輸出true,生成的equals判斷所有屬性相同

 // 自動生成hashCode方法

 System.out.println(blog.hashCode());// 輸出577081312

 System.out.println(otherBlog.hashCode());// 輸出577081312

 // 測試往set中添加資料

 Set<BlogDo> set = new HashSet<BlogDo>();

 System.out.println(set.add(blog));// 輸出true

 System.out.println(set.add(otherBlog));// 輸出false

5. Lombok有什麼坑麼

在繼承時,Lombok自動生成的toString、equals、hashCode方法預設會忽略父類的不同,其實這一點挺坑的,看例子。

/*

* 父類-動物

@Data

public class Animal {

private String type;

* 子類-人類,人類也是哺乳動物的一種

public class Human extends Animal{

private String name;

 * 測試

 Human h1=new Human();

 h1.setType("猿人");

 h1.setName("老陳");

 Human h2=new Human();

 h2.setType("新人類");

 h2.setName("老陳");

 System.out.println(h1.toString());//輸出:Human(name=老陳),可見直接忽略了父類

 System.out.println(h1.equals(h2));//輸出:true,判斷相等也不看父類,其實這個不符合我們正常思維的

 System.out.println(h1.hashCode()==h2.hashCode());//輸出true,也不看父類情況

其實預設應該是将父類的參數納入計算,這樣才符合我們正常思維,預設思維。

但是也能解決,添加以下兩個注解,就能将父類内容納入計算了

@ToString(callSuper = true)//讓父類參與到計算

@EqualsAndHashCode(callSuper = true)//讓父類參與到計算

1

2

我們納入注解以後看下情況:

@ToString(callSuper = true)

@EqualsAndHashCode(callSuper = true)

 System.out.println(h1.toString());//輸出:Human(super=Animal(type=猿人), name=老陳)

 System.out.println(h1.equals(h2));//輸出:false,父類參與判斷了

 System.out.println(h1.hashCode()==h2.hashCode());//輸出false,父類參數參與計算了

6. 總結

Lombok還是要用的,需要稍微注意一下使用中的問題就行。

另外equals和hashCode預設會讓所有的屬性參與計算,實際我們在寫項目中,可能隻用一個id計算。那就需要重寫equals和hashCode方法。

一些童鞋不喜歡寫hashCode,這是不對的哦,因為hashCode不光有助于快速查找,還影響相等的判斷,是以不寫hashCode可能直接導緻判斷失敗!

一些散列集合如HashMap/HashSet,會先看hashCode是否相等,hashCode不等則直接認定不相等了,根本不會給equals機會。

是以記住:凡是重寫equals,必須要重寫hashCode!

最後今天是周日,祝大家周日哈皮!

繼續閱讀