怎么使用Lombok插件來(lái)簡(jiǎn)化我們JavaBean的開(kāi)發(fā)呢劲件?

使用Lombok插件來(lái)簡(jiǎn)化JavaBean的開(kāi)發(fā)

我們之前在開(kāi)發(fā)JavaBean的時(shí)候掸哑,還是有幾處比較麻煩的地方的,不知你看出來(lái)了沒(méi)有零远。

第一個(gè)麻煩之處是咱們要編寫(xiě)JavaBean的getter/setter方法苗分;第二個(gè)麻煩之處是我們經(jīng)常要為JavaBean添加有參/無(wú)參構(gòu)造器,以及還得重寫(xiě)它的toString方法牵辣。而使用Lombok插件之后摔癣,這些我們就能簡(jiǎn)化掉了。

那怎么使用Lombok插件來(lái)簡(jiǎn)化我們JavaBean的開(kāi)發(fā)呢纬向?很簡(jiǎn)單择浊,只須遵循下面這幾個(gè)步驟即可。

引入對(duì)Lombok插件的依賴

首先逾条,我們得給咱們的項(xiàng)目里面引入對(duì)Lombok插件的依賴琢岩,記住咱是不用寫(xiě)依賴版本號(hào)的,因?yàn)镾pring Boot已經(jīng)默認(rèn)管理了該依賴的版本师脂。

咱也不妨再看看担孔,打開(kāi)咱們maven項(xiàng)目的pom.xml文件江锨,發(fā)現(xiàn)咱們的maven項(xiàng)目繼承了如下這樣一個(gè)父項(xiàng)目,該父項(xiàng)目是來(lái)做依賴管理的糕篇。

image.png

我們不妨點(diǎn)進(jìn)以上父項(xiàng)目里面去看一看泳桦,如下圖所示,發(fā)現(xiàn)它里面還有一個(gè)父項(xiàng)目娩缰。

image.png

我們不妨再來(lái)點(diǎn)進(jìn)以上父項(xiàng)目里面去看一看灸撰,點(diǎn)進(jìn)來(lái)以后,我們可以看到它里面有一對(duì)<properties></properties>標(biāo)簽拼坎,在該標(biāo)簽里面聲明了幾乎我們開(kāi)發(fā)中常用的那些jar包的版本號(hào)浮毯,如下圖所示。


image.png

咱不妨來(lái)搜索一下Lombok插件的依賴泰鸡,看看它的版本號(hào)是多少债蓝,如下圖所示,可以看到其版本號(hào)是1.18.20盛龄。


image.png

還是回到主題吧饰迹!我們要做的第一步就是在maven項(xiàng)目里面引入對(duì)Lombok插件的依賴,如下所示余舶。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

在IDEA中搜索安裝Lombok插件

除了在咱們的maven項(xiàng)目里面引入對(duì)Lombok插件的依賴之外啊鸭,我們還得在IDEA中搜索安裝Lombok插件,這樣它就會(huì)來(lái)幫我們自動(dòng)的生成JavaBean的getter/setter方法了匿值,當(dāng)然了赠制,還有其他的東東。大家一定得注意了挟憔,Lombok插件是在程序編譯的時(shí)候才會(huì)幫我們生成那些玩意钟些,所以咱們的源代碼看起來(lái)會(huì)很清晰。

在IDEA中安裝插件很簡(jiǎn)單的啦绊谭!其實(shí)政恍,如果你用的是比較新的IDEA,比如筆者用的IntelliJ IDEA 2020.3.3达传,那么你也不需要再安裝Lombok插件了篙耗,因?yàn)镮ntelliJ IDEA 2020.3.3早就已經(jīng)集成該插件了。

使用Lombok插件

現(xiàn)在趟大,我們就能在咱的程序里面使用Lombok插件了鹤树。使用上該插件之后,在咱開(kāi)發(fā)的JavaBean里面逊朽,你就再也不用寫(xiě)那些getter/setter方法罕伯、有參/無(wú)參構(gòu)造器以及toString方法了,如此一來(lái)叽讳,JavaBean里面就保持得很干凈了追他。當(dāng)然坟募,要是你不使用Lombok插件,而且還堂而皇之的不寫(xiě)屬性的getter/setter方法邑狸,那么這些屬性就相當(dāng)于跟沒(méi)有一樣懈糯。

接下來(lái),我就來(lái)告訴大家如何在咱開(kāi)發(fā)的JavaBean里面使用Lombok插件(的注解)单雾。

@Data注解

首先赚哗,我們來(lái)看Lombok插件里面的第一個(gè)注解,即@Data硅堆,該注解是來(lái)幫我們生成我們已有屬性的getter/setter方法的屿储。下面我就以Pet類為例來(lái)進(jìn)行演示了喲

先把Pet類里面name屬性的getter/setter方法給刪除掉,然后在Pet類上標(biāo)注一個(gè)@Data注解渐逃,如下所示够掠。

package com.meimeixia.boot.bean;
import lombok.Data;
/**
 * @author liayun
 * @create 2021-04-23 19:16
 *
 * 寵物
 */
@Data
public class Pet {
    private String name;
    public Pet() {
    }
    public Pet(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Pet{" +
                "name='" + name + '\'' +
                '}';
    }
}

這樣,在程序編譯的時(shí)候@Data注解就會(huì)幫我們生成name屬性的getter/setter方法了茄菊。

@ToString注解

@ToString注解是在程序編譯的時(shí)候自動(dòng)幫我們生成JavaBean的toString方法的疯潭,注意不是在源代碼中就給我們生成了喲,因此我們的源代碼會(huì)看起來(lái)很清爽面殖。

那么竖哩,@ToString注解該怎么用呢?很簡(jiǎn)單畜普,先把Pet類里面的toString方法給刪除掉期丰,然后在Pet類上標(biāo)注一個(gè)@ToString注解群叶,如下所示吃挑。

package com.meimeixia.boot.bean;

import lombok.Data;
import lombok.ToString;

/**
 * @author liayun
 * @create 2021-04-23 19:16
 *
 * 寵物
 */
@Data
@ToString
public class Pet {

    private String name;

    public Pet() {

    }

    public Pet(String name) {
        this.name = name;
    }

}

@AllArgsConstructor注解

在JavaBean里面,我們得經(jīng)常添加有參無(wú)參構(gòu)造器街立,如果還是像之前一樣以手寫(xiě)或者快捷鍵的方式來(lái)生成舶衬,未免有些麻煩。而現(xiàn)在用上Lombok插件之后赎离,一個(gè)注解就能搞定了逛犹。這里,我們先來(lái)看一下@AllArgsConstructor注解梁剔,該注解是使用JavaBean中所有屬性來(lái)幫我們生成一個(gè)有參構(gòu)造器的虽画,即全參構(gòu)造器。

那么荣病,@AllArgsConstructor注解該怎么用呢码撰?很簡(jiǎn)單,先把Pet類里面的有參構(gòu)造器給刪除掉个盆,然后在Pet類上標(biāo)注一個(gè)@AllArgsConstructor注解脖岛,如下所示朵栖。

package com.meimeixia.boot.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;

/**
 * @author liayun
 * @create 2021-04-23 19:16
 *
 * 寵物
 */
@Data
@ToString
@AllArgsConstructor
public class Pet {

    private String name;

    public Pet() {

    }

}

@NoArgsConstructor注解

@NoArgsConstructor注解是來(lái)幫我們生成JavaBean的無(wú)參構(gòu)造器的。

那么柴梆,@NoArgsConstructor注解該怎么用呢陨溅?很簡(jiǎn)單,先把Pet類里面的無(wú)參構(gòu)造器給刪除掉绍在,然后在Pet類上標(biāo)注一個(gè)@NoArgsConstructor注解门扇,如下所示。

package com.meimeixia.boot.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * @author liayun
 * @create 2021-04-23 19:16
 *
 * 寵物
 */
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Pet {

    private String name;

}

看到了沒(méi)有偿渡,咱們的源代碼是不是看起來(lái)非常清爽了懊跎ぁ!

舉一反三卸察,大家接下來(lái)不妨將如下User類也給整改一下脯厨,不知道你會(huì)不會(huì)?

package com.meimeixia.boot.bean;

/**
 * @author liayun
 * @create 2021-04-23 19:14
 *
 * 用戶
 */
public class User {

    private String name;
    private Integer age;

    private Pet pet;

    public Pet getPet() {
        return pet;
    }

    public void setPet(Pet pet) {
        this.pet = pet;
    }

    public User() {

    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", pet=" + pet +
                '}';
    }

}

使用上Lombok插件里面的注解之后坑质,不知道大家是不是寫(xiě)成了下面這樣合武?

package com.meimeixia.boot.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * @author liayun
 * @create 2021-04-23 19:14
 *
 * 用戶
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {

    private String name;
    private Integer age;

    private Pet pet;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

}

大家可一定要注意了,以上@AllArgsConstructor注解是來(lái)幫我們生成JavaBean的全參構(gòu)造器的涡扼。如果你不想使用JavaBean中所有屬性來(lái)生成一個(gè)有參構(gòu)造器稼跳,例如只想使用JavaBean中name和age這兩個(gè)屬性來(lái)生成一個(gè)有參構(gòu)造器,那么這就得你自己來(lái)寫(xiě)了吃沪,就像上面那樣汤善。這樣,靈活性是不是就比較強(qiáng)一點(diǎn)了捌北搿红淡!

@EqualsAndHashCode注解

@EqualsAndHashCode注解是使用JavaBean中所有屬性來(lái)幫我們重寫(xiě)JavaBean的equals和hashCode這倆方法的。

該注解使用起來(lái)也特別簡(jiǎn)單降铸,即在JavaBean上標(biāo)注該注解就行在旱,如下所示。

package com.meimeixia.boot.bean;

import lombok.*;

/**
 * @author liayun
 * @create 2021-04-23 19:14
 *
 * 用戶
 */
@Data
@NoArgsConstructor
//@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class User {

    private String name;
    private Integer age;

    private Pet pet;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

}

@Slf4j注解

Lombok插件里面還有一個(gè)注解推掸,即@Slf4j桶蝎,使用上該注解之后就相當(dāng)于注入了日志相關(guān)組件,因此可以簡(jiǎn)化日志開(kāi)發(fā)谅畅,這樣登渣,我們以后就再也不用通過(guò)輸出語(yǔ)句來(lái)打印日志了貌矿。若我們想要記錄東西缔刹,則使用日志即可闸准。

那么抒痒,@Slf4j注解又該怎么用呢菩暗?很簡(jiǎn)單朗若,我們不妨在HelloController類上標(biāo)注上該注解太惠,如此一來(lái)痕鳍,該注解就會(huì)自動(dòng)給HelloController這個(gè)類里面注入log這樣一個(gè)屬性(組件)了,也即日志記錄器芬位,然后咱就可以使用該日志記錄器來(lái)記錄日志了无拗。

package com.meimeixia.boot.controller;

import com.meimeixia.boot.bean.Car;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author liayun
 * @create 2021-04-19 4:24
 */
@Slf4j
@RestController
public class HelloController {

    @Autowired
    Car car; // car實(shí)例里面每一個(gè)屬性的值都是跟配置文件進(jìn)行綁定的

    @RequestMapping("/car")
    public Car car() {
        return car;
    }

    @RequestMapping("/hello")
    public String handle01(@RequestParam("name") String name) {
        // 在HelloController類上標(biāo)注了@Slf4j注解之后,該注解會(huì)自動(dòng)給HelloController這個(gè)類里面注入log這樣一個(gè)屬性(組件)昧碉,也即日志記錄器
        log.info("請(qǐng)求進(jìn)來(lái)了......");
        return "Hello, Spring Boot 2!" + "你好:" + name;
    }

}

此時(shí)英染,我們就來(lái)做一個(gè)測(cè)試,看一下我們整個(gè)Spring Boot應(yīng)用的所有功能是不是都能正常運(yùn)行被饿。

重新啟動(dòng)咱們的Spring Boot應(yīng)用四康,然后在瀏覽器中訪問(wèn)hello請(qǐng)求,訪問(wèn)成功之后狭握,可以看到我們的日志也是能正常打印出來(lái)的闪金,如下圖所示。


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末论颅,一起剝皮案震驚了整個(gè)濱河市哎垦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恃疯,老刑警劉巖漏设,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異今妄,居然都是意外死亡郑口,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)盾鳞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)犬性,“玉大人,你說(shuō)我怎么就攤上這事雁仲∽卸幔” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵攒砖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我日裙,道長(zhǎng)吹艇,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任昂拂,我火速辦了婚禮受神,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘格侯。我一直安慰自己鼻听,他們只是感情好财著,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著撑碴,像睡著了一般撑教。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上醉拓,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天伟姐,我揣著相機(jī)與錄音,去河邊找鬼亿卤。 笑死愤兵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的排吴。 我是一名探鬼主播秆乳,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钻哩!你這毒婦竟也來(lái)了矫夷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤憋槐,失蹤者是張志新(化名)和其女友劉穎双藕,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體阳仔,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忧陪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了近范。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘶摊。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖评矩,靈堂內(nèi)的尸體忽然破棺而出叶堆,到底是詐尸還是另有隱情,我是刑警寧澤斥杜,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布虱颗,位于F島的核電站,受9級(jí)特大地震影響蔗喂,放射性物質(zhì)發(fā)生泄漏忘渔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一缰儿、第九天 我趴在偏房一處隱蔽的房頂上張望畦粮。 院中可真熱鬧,春花似錦、人聲如沸宣赔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)儒将。三九已至吏祸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間椅棺,已是汗流浹背犁罩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留两疚,地道東北人床估。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像诱渤,于是被迫代替她去往敵國(guó)和親丐巫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容