使用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)做依賴管理的糕篇。
我們不妨點(diǎn)進(jìn)以上父項(xiàng)目里面去看一看泳桦,如下圖所示,發(fā)現(xiàn)它里面還有一個(gè)父項(xiàng)目娩缰。
我們不妨再來(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)浮毯,如下圖所示。
咱不妨來(lái)搜索一下Lombok插件的依賴泰鸡,看看它的版本號(hào)是多少债蓝,如下圖所示,可以看到其版本號(hào)是1.18.20盛龄。
還是回到主題吧饰迹!我們要做的第一步就是在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)的闪金,如下圖所示。