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