Lombok
對于Java偷懶開發(fā)者
來說應(yīng)該是比較中意的膘盖,恰恰筆者就是一個(gè)喜歡在小細(xì)節(jié)上偷懶來提高開發(fā)效率的人转锈。所以在技術(shù)框架的海洋里尋找了很久才在GitHub
開源平臺上找到盘寡,而在這之前國外很多程序猿一直使用該框架了,Lombok
框架提供了很多編碼遍歷撮慨,但是也降低了代碼的閱讀力竿痰。下面我們看看在Idea開發(fā)工具中該怎么使用Lombok
?
本章目標(biāo)
使用Lombok提高開發(fā)效率砌溺。
免費(fèi)教程專題
恒宇少年在博客整理三套免費(fèi)學(xué)習(xí)教程專題
影涉,由于文章偏多
特意添加了閱讀指南
,新文章以及之前的文章都會在專題內(nèi)陸續(xù)填充
规伐,希望可以幫助大家解惑更多知識點(diǎn)蟹倾。
SpringBoot 企業(yè)級核心技術(shù)學(xué)習(xí)專題
專題 | 專題名稱 | 專題描述 |
---|---|---|
001 | Spring Boot 核心技術(shù) | 講解SpringBoot一些企業(yè)級層面的核心組件 |
002 | Spring Boot 核心技術(shù)章節(jié)源碼 | Spring Boot 核心技術(shù)簡書每一篇文章碼云對應(yīng)源碼 |
003 | Spring Cloud 核心技術(shù) | 對Spring Cloud核心技術(shù)全面講解 |
004 | Spring Cloud 核心技術(shù)章節(jié)源碼 | Spring Cloud 核心技術(shù)簡書每一篇文章對應(yīng)源碼 |
005 | QueryDSL 核心技術(shù) | 全面講解QueryDSL核心技術(shù)以及基于SpringBoot整合SpringDataJPA |
006 | SpringDataJPA 核心技術(shù) | 全面講解SpringDataJPA核心技術(shù) |
007 | SpringBoot核心技術(shù)學(xué)習(xí)目錄 | SpringBoot系統(tǒng)的學(xué)習(xí)目錄,敬請關(guān)注點(diǎn)贊2痢鲜棠!! |
構(gòu)建項(xiàng)目
本章的項(xiàng)目不涉及數(shù)據(jù)訪問,所以添加的依賴也比較少萧朝,pom.xml配置文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yuqiyu</groupId>
<artifactId>chapter29</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>chapter29</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--web依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok依賴-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
lombok
的依賴僅僅只有一個(gè)岔留,lombok
基于配置在編譯class文件時(shí)會自動(dòng)將指定模板的內(nèi)容寫入夏哭。
創(chuàng)建實(shí)體
為了方便演示lombok
的神奇之處检柬,我們簡單創(chuàng)建一個(gè)用戶實(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/Setter
Getter/Setter注解作用域可以是實(shí)體類也可以是具體的屬性字段里逆,下面我們僅僅對name
屬性添加注解,代碼如下所示:
//...省略
//名稱
@Getter
@Setter
private String name;
如果想讓lombok
生效我們還需要針對idea工具進(jìn)行插件的安裝用爪,下面我們按照順序打開Idea配置File > Settings > Plugins > Browse repositories... > 輸入lombok
原押,插件就會被自動(dòng)檢索出來,界面如下圖1所示:
我的工具已經(jīng)安裝了該插件偎血,所有在右側(cè)是沒有任何按鈕的诸衔,如果你的工具沒有安裝該插件,右側(cè)會有一個(gè)綠色的按鈕颇玷,按鈕的內(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ā)中就不需要再去做多余的生成操作了锁摔。
注意:如果你的屬性Getter/Setter需要做特殊處理,那么直接使用原始方法實(shí)現(xiàn)即可哼审,Lombok檢查到存在自定義的方法后不會再做生成處理鄙漏。
ToString
除了上述的Getter/Setter
Lombok還為我們提供了自動(dòng)生成toString方法的注解@ToString
,該注解的作用域僅僅是在實(shí)體類上棺蛛,我們修改實(shí)體類添加該注解怔蚌,在測試類中調(diào)用toString方法查看輸出內(nèi)容如下:
System.out.println(user.toString());
//輸出:
UserBean(name=測試lombok, age=10, address=sss測試地址)
Lombok
自動(dòng)創(chuàng)建的toString方法會將所有的屬性都包含并且調(diào)用后可以輸出。
AllArgsConstructor
Lombok
還提供了全部參數(shù)的構(gòu)造函數(shù)的自動(dòng)生成旁赊,該注解的作用域也是只有在實(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測試地址)
注意:該注解配置后會自動(dòng)生成一個(gè)具體全部參數(shù)的構(gòu)造函數(shù)籍胯,參數(shù)的順序與屬性定義的順序一致。
NoArgsConstructor
當(dāng)然除了全部參數(shù)的構(gòu)造函數(shù)离福,Lombok
還提供了沒有參數(shù)的構(gòu)造函數(shù)杖狼,使用方式與@AllArgsConstructor一致。
到這里也許你就有疑問了妖爷,我為了一個(gè)類添加這么多注解麻煩嗎蝶涩?還不如工具生成getter/setter
來的快呢,那好Lombok
針對這個(gè)問題也做出了解決方案。
Data
我們使用@Data
注解就可以涵蓋@ToString
绿聘、@Getter
嗽上、@Setter
方法,當(dāng)然我們使用構(gòu)造函數(shù)時(shí)還是需要單獨(dú)添加注解熄攘,下面我們修改實(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
三個(gè)注解注釋掉后添加@Data
挪圾,按照官方所說這時(shí)我們的測試類應(yīng)該不會出現(xiàn)任何的異常浅萧,我們打開測試類查看是否正常。
查看后果然哲思,沒有出現(xiàn)任何的異常惯殊,這也說明了@Data
注解確實(shí)涵蓋了上面三個(gè)注解。
Slf4j
還有一個(gè)利器也殖,Lombok
為我們內(nèi)置了各種日志組件的支持土思,我們在SpringBoot項(xiàng)目開發(fā)中幾乎都是使用logback
作為日志組件,而logback
是基于slf4j
完成的忆嗜。所以我們在實(shí)體類上直接添加@Slf4j
就可以自動(dòng)創(chuàng)建一個(gè)日志對象作為類內(nèi)全局字段己儒,自動(dòng)創(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
雖然提供的組件不多,但是每一個(gè)都是我們需要的绩卤,正是因?yàn)槿绱藦亩蟠鬁p少了我們的工作量途样,尤其是這種不起眼卻又不得不寫的代碼。Lombok官方文檔地址
本章代碼已經(jīng)上傳到碼云:
SpringBoot配套源碼地址:https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源碼地址:https://gitee.com/hengboy/spring-cloud-chapter