摘要:還提供了全部參數的構造函數的自動生成,該注解的作用域也是只有在實體類上,因為只有實體類才會存在構造函數。當然除了全部參數的構造函數,還提供了沒有參數的構造函數,使用方式與一致。
Lombok對于Java偷懶開發者來說應該是比較中意的,恰恰筆者就是一個喜歡在小細節上偷懶來提高開發效率的人。所以在技術框架的海洋里尋找了很久才在GitHub開源平臺上找到,而在這之前國外很多程序猿一直使用該框架了,Lombok框架提供了很多編碼遍歷,但是也降低了代碼的閱讀力。下面我們看看在Idea開發工具中該怎么使用Lombok?
本章目標使用Lombok提高開發效率。
構建項目本章的項目不涉及數據訪問,所以添加的依賴也比較少,pom.xml配置文件如下所示:
4.0.0 com.yuqiyu chapter29 0.0.1-SNAPSHOT jar chapter29 Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 1.5.6.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-web org.projectlombok lombok 1.16.18 org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
lombok的依賴僅僅只有一個,lombok基于配置在編譯class文件時會自動將指定模板的內容寫入。
創建實體為了方便演示lombok的神奇之處,我們簡單創建一個用戶實體,基于該實體進行配置lombok注解,實體代碼如下所示:
package com.yuqiyu.chapter29.bean; /** * 用戶實體>>>測試lombok * ======================== * Created with IntelliJ IDEA. * User:恒宇少年 * Date:2017/8/4 * Time:23:07 * 碼云:http://git.oschina.net/jnyqy * ======================== */ public class UserBean { //名稱 private String name; //年齡 private int age; //家庭住址 private String address; }
下面我們先來看看我們最常用的getter/setter基于lombok如何使用。
Getter/SetterGetter/Setter注解作用域可以是實體類也可以是具體的屬性字段,下面我們僅僅對name屬性添加注解,代碼如下所示:
//...省略 //名稱 @Getter @Setter private String name;
如果想讓lombok生效我們還需要針對idea工具進行插件的安裝,下面我們按照順序打開Idea配置File > Settings > Plugins > Browse repositories... > 輸入lombok,插件就會被自動檢索出來,界面如下圖1所示:
我的工具已經安裝了該插件,所有在右側是沒有任何按鈕的,如果你的工具沒有安裝該插件,右側會有一個綠色的按鈕,按鈕的內容則是Install,點擊安裝后重啟Idea就可以了。
為了方便我們直接使用SpringBoot項目為我們創建的測試類(位置:com.yuqiyu.chapter29.Chapter29ApplicationTests)來驗證我們的lombok注解是否已經生效,測試類代碼如下所示:
package com.yuqiyu.chapter29; import com.yuqiyu.chapter29.bean.UserBean; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @RunWith(JUnit4.class) //@RunWith(SpringRunner.class) //@SpringBootTest public class Chapter29ApplicationTests { @Test public void testLombok() { //測試Getter/Setter UserBean user = new UserBean(); user.setName("測試lombok"); System.out.println(user.getName()); } }
可以看到我們可以正常使用name屬性的getter/setter方法,但是其他屬性的卻是無法調用,下面我們修改注解Getter/Setter位置,配置到實體類上。修改后的代碼如下所示:
//省略... @Getter @Setter public class UserBean { //名稱 private String name; //年齡 private int age; //家庭住址 private String address; }
我們再來測試下其他屬性是否可以訪問到了,測試類修改代碼如下所示:
//省略... @Test public void testLombok() { //測試Getter/Setter UserBean user = new UserBean(); user.setName("測試lombok"); user.setAge(10); user.setAddress("測試地址"); System.out.println(user.getName()+" " + user.getAge() +" "+user.getAddress()); }
可以看到我們修改配置位置后UserBean實體內的所有屬性都具備了Getter/Setter方法,這樣我們在開發中就不需要再去做多余的生成操作了。
ToString注意:如果你的屬性Getter/Setter需要做特殊處理,那么直接使用原始方法實現即可,Lombok檢查到存在自定義的方法后不會再做生成處理。
除了上述的Getter/SetterLombok還為我們提供了自動生成toString方法的注解@ToString,該注解的作用域僅僅是在實體類上,我們修改實體類添加該注解,在測試類中調用toString方法查看輸出內容如下:
System.out.println(user.toString()); //輸出: UserBean(name=測試lombok, age=10, address=sss測試地址)
Lombok自動創建的toString方法會將所有的屬性都包含并且調用后可以輸出。
AllArgsConstructorLombok還提供了全部參數的構造函數的自動生成,該注解的作用域也是只有在實體類上,因為只有實體類才會存在構造函數。修改添加該注解并且測試調用,如下所示:
UserBean u = new UserBean("構造lombok",1,"測試地址"); //輸出: UserBean(name=構造lombok, age=1, address=sss測試地址)
NoArgsConstructor注意:該注解配置后會自動生成一個具體全部參數的構造函數,參數的順序與屬性定義的順序一致。
當然除了全部參數的構造函數,Lombok還提供了沒有參數的構造函數,使用方式與@AllArgsConstructor一致。
到這里也許你就有疑問了,我為了一個類添加這么多注解麻煩嗎?還不如工具生成getter/setter來的快呢,那好Lombok針對這個問題也做出了解決方案。
Data我們使用@Data注解就可以涵蓋@ToString、@Getter、@Setter方法,當然我們使用構造函數時還是需要多帶帶添加注解,下面我們修改實體類添加@Data注解代碼如下所示:
/*@Getter @Setter @ToString*/ @Data @AllArgsConstructor @NoArgsConstructor public class UserBean { //名稱 private String name; //年齡 private int age; //家庭住址 private String address; public String getAddress() { return "sss"+address; } }
我們將@ToString、@Getter、@Setter三個注解注釋掉后添加@Data,按照官方所說這時我們的測試類應該不會出現任何的異常,我們打開測試類查看是否正常。
查看后果然,沒有出現任何的異常,這也說明了@Data注解確實涵蓋了上面三個注解。
還有一個利器,Lombok為我們內置了各種日志組件的支持,我們在SpringBoot項目開發中幾乎都是使用logback作為日志組件,而logback是基于slf4j完成的。所以我們在實體類上直接添加@Slf4j就可以自動創建一個日志對象作為類內全局字段,自動創建的代碼如下所示:
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Chapter29ApplicationTests.class);
為了測試我在Chapter29ApplicationTests測試類上添加了@Slf4j,調用效果如下所示:
//調用: log.info(u.toString()); //輸出: 23:55:46.100 [main] INFO com.yuqiyu.chapter29.Chapter29ApplicationTests - UserBean(name=構造lombok, age=1, address=sss測試地址)總結
以上內容就是本章的全部講述,本章主要講解Lombok用于便于開發的注解組件。Lombok雖然提供的組件不多,但是每一個都是我們需要的,正是因為如此從而大大減少了我們的工作量,尤其是這種不起眼卻又不得不寫的代碼。Lombok官方文檔地址
本章代碼已經上傳到碼云:
網頁地址:http://git.oschina.net/jnyqy/lessons
Git地址:https://git.oschina.net/jnyqy/lessons.git
SpringBoot相關系列文章請訪問:目錄:SpringBoot學習目錄
QueryDSL相關系列文章請訪問:QueryDSL通用查詢框架學習目錄
SpringDataJPA相關系列文章請訪問:目錄:SpringDataJPA學習目錄
感謝閱讀!
歡迎加入QQ技術交流群,共同進步。
QQ技術交流群
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67649.html
摘要:基于版本基于版本。由于中英行文差異,完全的逐字逐句翻譯會很冗余啰嗦。譯者在翻譯中同時參考了谷歌百度有道翻譯的譯文以及編程思想第四版中文版的部分內容對其翻譯死板,生造名詞,語言精煉度差問題進行規避和改正。 來源:LingCoder/OnJava8 主譯: LingCoder 參譯: LortSir 校對:nickChenyx E-mail: 本書原作者為 [美] Bru...
摘要:概述通過提供簡單的語法注解形式來幫助簡化消除一些必須有但顯得很臃腫的代碼。作用在方法參數上的注解,用于自動生成空值參數檢查自動幫我們調用方法。 showImg(https://segmentfault.com/img/remote/1460000014247343); 概述 Lombok 通過提供簡單的語法注解形式來幫助簡化消除一些必須有但顯得很臃腫的 java 代碼。典型的是對于 ...
摘要:微服務的基本思想在于考慮圍繞著業務領域組件來創建應用,這些應用可獨立地進行開發管理和加速。在分散的組件中使用微服務云架構和平臺,使部署管理和服務功能交付變得更加簡單。 showImg(https://segmentfault.com/img/remote/1460000014332184); 概述 當下web服務端開發中最火的名詞中絕對有微服務的一席之地,其也成為當下互聯網后端服務架...
摘要:實體代碼如下所示恒宇少年碼云用戶名密碼創建內添加一個注冊方法,該方法只是實現注冊事件發布功能,代碼如下所示恒宇少年碼云用戶注冊方法省略其他邏輯發布事件事件發布是由對象管控的,我們發布事件前需要注入對象調用方法完成事件發布。 ApplicationEvent以及Listener是Spring為我們提供的一個事件監聽、訂閱的實現,內部實現原理是觀察者設計模式,設計初衷也是為了系統業務邏輯之...
摘要:在文章微服務調用鏈追蹤中心搭建一文中模擬出來的調用鏈就是一個遠程調用的例子,只不過這篇文章里是通過這種同步調用方式,利用的是協議在應用層完成的,這種方法雖然奏效,但有時效率并不高。 showImg(https://segmentfault.com/img/remote/1460000014858219); 一、概述 RPC(Remote Procedure Call)即 遠程過程調...
閱讀 2672·2021-11-18 10:02
閱讀 3439·2021-09-22 15:50
閱讀 2365·2021-09-06 15:02
閱讀 3584·2019-08-29 16:34
閱讀 1751·2019-08-29 13:49
閱讀 1281·2019-08-29 13:29
閱讀 3644·2019-08-28 18:08
閱讀 2946·2019-08-26 11:52