一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Boot利用Lombok減少Java中樣板代碼的方法示例

Spring Boot利用Lombok減少Java中樣板代碼的方法示例

2020-12-28 09:18橘子拌飯有營養哦 Java教程

spring Boot是非常高效的開發框架,lombok是一套代碼模板解決方案,將極大提升開發的效率,下面這篇文章主要給大家介紹了關于Spring Boot利用Lombok減少Java中樣板代碼的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

Lombok想要解決了的是在我們實體Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不會用到,但是某些時候仍然需要復寫,以期方便使用的方法;在使用Lombok之后,將由其來自動幫你實現代碼生成,注意,其是在運行過程中,幫你自動生成的。就是說,將極大減少你的代碼總量。

Lombok的官方地址: https://projectlombok.org/

其實說實話第一次聽到Lombok的時候,是從一個帶我的匈牙利老師傅那里學來的。那個時候他給了我一套JPA的代碼來訪問數據庫。 當我打開代碼的時候,看到滿屏幕的錯誤,打開實體Entity類一看,就一些成員變量的定義,完全沒有setter 與getter的方法。 當時我就凌亂了,這什么啊。 后來當他告訴我 去查查lombok我才恍然大悟。

其實對于Java來說我一直都是愛與恨相互糾結。 一方面,Java確實是一種非常成熟的編程語言,具體很多開源的框架跟庫,使得開發相對來說比較容易。 但是另一方面,它是非常冗長的, 因為需要編寫大量的常用的樣板代碼。 雖然說在Java8中引入了 Lambdas 跟 stream, 情況變得相對來說好了一些, 但是在某一些方面仍然存在一些差異, 比如編寫簡單的Java對象Pojo,但是現在有了Lombok這個插件,你會發現我們寫代碼到底可以多輕松。 因為許多常用的方法像 Setter, getter, toString, equal等等 甚至 構造器 都已經幫你完成了,我們所需要做的就只是在對的地方添加上注解標記就好了。

方法如下:

首先我們來看看傳統的 Java POJO類 應該來怎么定義:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class User {
 
 private String name;
 private String surname;
 private int age;
 
 public User(String name, String surname, int age) {
  this.name = name;
  this.surname = surname;
  this.age = age;
 }
 
 public String getName() {
  return name;
 }
 
 public void setName(String name) {
  this.name = name;
 }
 
 public String getSurname() {
  return surname;
 }
 
 public void setSurname(String surname) {
  this.surname = surname;
 }
 
 public int getAge() {
  return age;
 }
 
 public void setAge(int age) {
  this.age = age;
 }
 
 @Override
 public boolean equals(Object o) {
  if (this == o) return true;
  if (o == null || getClass() != o.getClass()) return false;
  User user = (User) o;
  return age == user.age
    && Objects.equals(name, user.name)
    && Objects.equals(surname, user.surname);
 }
 
 @Override
 public int hashCode() {
  return Objects.hash(name, surname, age);
 }
 
 @Override
 public String toString() {
  return "User{" +
    "name='" + name + '\'' +
    ", surname='" + surname + '\'' +
    ", age=" + age +
    '}';
 }
 
}

在這個常規的POJO類中只有三個成員字段, name, surname 和 age。但是它具有常見的POJO類的一切通用元素: getters,** setters, equals, hashCode, 和toString** 方法.

為了完成這個僅僅只有三個成員變量的類,我們竟然寫了差不多60行的diamante。 確實,如果你使用IDE的話,IDE確實可以幫你自動生成一些方法的實現,但是在閱讀代碼的看到這些代碼你難道不覺得頭疼么。 下面我們通過使用Lombok來簡化我們的代碼。

首先在項目中添加Lombok的依賴:

?
1
2
3
4
5
6
<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <version>1.16.10</version>
 <scope>provided</scope>
</dependency>

通常情況下在,如果你使用IDE例如Intellji后者Eclipse,你還需要裝上 Lombok的Plugin才能正確使用。 Lombok為成員變量提供了一些基本的注解來確保每一個成員變量都能夠自動擁有訪問的方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@EqualsAndHashCode
@ToString
@AllArgsConstructor
public class User {
 
 @Setter
 @Getter
 private String name;
 
 @Setter
 @Getter
 private String surname;
 
 @Setter
 @Getter
 private int age;
 
}

正如你所見的,我們使用了五個基本的注解。

@EqualsAndHashCode, @ToString 告訴Lombok來生成 equals, hashCode, 和 toString 方法, 在生成這些方法的時候lombok會使用所有的成員變量。 @AllArgsConstructor會自動創建一個包括所有成員的構造器。 @Getter/@Setter annotations 注解會為每一個標記的成員變量自動生成對應的方法。

現在我們只需要像這個正常使用它就好了

?
1
2
3
User user = new User("John", "Doe", 32);
user.setAge(30);
user.equals(new User("John", "Doe", 30)); // true

如果你不想將注解用在全部的成員變量上,而是僅僅部分變量上,那么你可以提供一個指定的哪一個成員變量需要自動生成方法的變量。 比如在這里,我們不想讓 age 這個成員變量出現在 toString 方法里,我們可以這么做:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@EqualsAndHashCode
@ToString(of = {"name", "surname"})
@AllArgsConstructor
public class User {
 
 @Getter
 @Setter
 private String name;
 
 @Getter
 @Setter
 private String surname;
 
 @Getter
 @Setter
 private int age;
 
}

我想到這里,這些代碼已經比我們一開始要好太多了,但是它任然不夠簡潔。這里重復了大量的 @Getter 和 @Setter 注解。如果你只是需要在Class中僅暴露幾個字段,那么使用它們非常方便,但如果您需要為所有字段生成訪問器,則會變得煩人又無聊。為了使代碼更加簡潔, Lombok永續我們在類級上使用這些注解。如果這些注解放在類名之上,那么lombok會自動為我們生成所有字段的訪問方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Getter
@Setter
public class User {
 
 private String name;
 private String surname;
 private int age;
 
}

目前為止我們所做的修改并沒有改變類的行為,但是卻使我們的類看起來更加的簡潔。這就是我們使用Lombok想要達到的效果。

除此之外Lombok還有一個注解叫做 @Builder。 下面我們來看一段這樣的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@Getter
@Setter
@Builder
public class User {
 
 private String name;
 private String surname;
 private int age;
 
}

我們給User這個類加了一個@Builder的注解,下面我們如果想實例化這個類,你第一想到的是不是:

?
1
2
3
4
User user=new User;
user.setxxx();
....
....

但是現在我們可以利用@Builder注解這樣生成實例:

?
1
2
3
4
5
User user = User.builder()
  .name("John")
  .surname("Doe")
  .age(32)
  .build();

怎么樣,是不是很方便,這樣你在生成實例的時候來呢setter方法都省得寫了。

其實說了這么說,下面這個注解才是Lombok的精華:

簡單的來說所有所有的注解我們都可以使用一個注解完成。 對 他就是@Data 注解。

?
1
2
3
4
5
6
7
8
9
@Data
@Builder
public class User {
 
 private String name;
 private String surname;
 private int age;
 
}

我們在定義類的時候 只需要加一個 @Data 注解,其他的注解我們都不需要在添加就可以達到前面所說的所有功能。 不相信的想伙伴可以試一試

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.jianshu.com/p/0aa846acd357

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 13日本xxxxxxxxx18 1313午夜精品久久午夜片 | 天天综合天天综合 | 日本xxx18hd | 亚洲视频在线观看地址 | 国产成人精品高清不卡在线 | 国产精品视频久久久久 | 青青草国产精品久久碰 | 星空无限传媒视频在线观看视频 | 欧美在线看片a免费观看 | 日韩视频一区二区三区 | 国产视频自拍一区 | 欧美亚洲国产另类在线观看 | 国产伦码精品一区二区三区 | 日韩资源在线 | 好大好硬好深好爽想要之黄蓉 | 黄色大片三级 | 免费a视频在线观看 | 99久久香蕉国产线看观香 | 强行扒开美女大腿挺进 | 2022国产麻豆剧传媒古装 | 丝瓜视频在线观看污 | 青青青在线视频播放 | 粉嫩极品国产在线观看免费 | 国产精品一区二区国产 | 国产露脸对白刺激3p在线 | 91精品综合久久久久久五月天 | 色姑娘色综合 | 乌克兰一级毛片 | 国产无限制自拍 | 国产一卡2卡3卡四卡精品网 | 日本色吧 | 好性20岁 | 婷婷中文网 | 国产99热99 | 亚洲天天综合网 | 欧美国产在线视频 | 日本黄色一区 | 国产精品久久久久jk制服 | 四虎在线精品观看免费 | 国产亚洲欧美成人久久片 | 亚洲va久久久噜噜噜久久狠狠 |