溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Lombok怎么在SpringBoot 2.x中使用

發(fā)布時間:2021-04-12 16:22:24 來源:億速云 閱讀:147 作者:Leah 欄目:編程語言

Lombok怎么在SpringBoot 2.x中使用?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

lombok是一個編譯級別的插件,它可以在項目編譯的時候生成一些代碼。比如日常開發(fā)過程中需要生產(chǎn)大量的JavaBean文件,每個JavaBean都需要提供大量的getset方法,如果字段較多且發(fā)生變動的話修改起來相對繁瑣,相應(yīng)的lombok可以通過注解(@getter,@setter)為我們省去手動創(chuàng)建gettersetter方法的麻煩,它能夠在我們編譯源碼的時候自動幫我們生成gettersetter方法。

即它最終能夠達(dá)到的效果是:在源碼中沒有gettersetter方法,但是在編譯生成的字節(jié)碼文件中有gettersetter方法。

安裝 lombok 插件

Lombok怎么在SpringBoot 2.x中使用

添加注解支持

Lombok怎么在SpringBoot 2.x中使用

添加依賴

buildscript {
 ext {
  springBootVersion = '2.0.2.RELEASE'
 }
 repositories {
  mavenCentral()
 }
 dependencies {
  classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
 }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.yanjun'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
 mavenCentral()
}


dependencies {
 compile('org.springframework.boot:spring-boot-starter',
   'org.springframework.boot:spring-boot-starter-web',
 )

 //添加lombok依賴
 compile 'org.projectlombok:lombok:1.18.0'

}

常用注解

  • @Data 注解在類上;提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法

  • @Setter :注解在屬性上;為屬性提供 setting 方法

  • @Setter :注解在屬性上;為屬性提供 getting 方法

  • @Log4j :注解在類上;為類提供一個 屬性名為log 的 log4j 日志對象

  • @NoArgsConstructor :注解在類上;為類提供一個無參的構(gòu)造方法

  • @AllArgsConstructor :注解在類上;為類提供一個全參的構(gòu)造方法

  • @Cleanup : 可以關(guān)閉流

  • @Builder : 被注解的類加個構(gòu)造者模式

  • @Synchronized : 加個同步鎖

  • @SneakyThrows : 等同于try/catch 捕獲異常

  • @NonNull : 如果給參數(shù)加個這個注解 參數(shù)為null會拋出空指針異常

  • @Value : 注解和@Data類似,區(qū)別在于它會把所有成員變量默認(rèn)定義為private final修飾,并且不會生成set方法。

@NonNull 判空處理

package com.yanjun.mybatis.bean;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;

@Data
@NoArgsConstructor
public class User {

 public Integer age;

 @NonNull
 public String name;

}

相當(dāng)于

package com.yanjun.mybatis.bean;

import lombok.NonNull;

public class User {
 public Integer age;
 @NonNull
 public String name;

 public Integer getAge() {
  return this.age;
 }

 @NonNull
 public String getName() {
  return this.name;
 }

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

 public void setName(@NonNull String name) {
  if (name == null) {
   throw new NullPointerException("name is marked @NonNull but is null");
  } else {
   this.name = name;
  }
 }
}

測試

User user = new User();
user.setName(null);

效果

Exception in thread "main" java.lang.NullPointerException: name is marked @NonNull but is null
at com.yanjun.mybatis.bean.User.setName(User.java:7)
at com.yanjun.mybatis.LombokApplication.main(LombokApplication.java:15)

@Data 提供 get、set 方法

package com.yanjun.mybatis.bean;

import lombok.Data;

@Data //自動生成 get、set 方法
public class User {

 Integer id;

 String name;

 Integer age;


 public static void main(String[] args) {
  //測試方法
  User user = new User();
  user.setName("zhaoyanjun");
  user.setAge(20);
  user.setId(1);
 }

}

@Slf4j 日志打印

package com.yanjun.mybatis.bean;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Data //自動生成 get、set 方法
@Slf4j //日志打印
public class User {

 Integer id;

 String name;

 Integer age;

 public static void main(String[] args) {
  User user = new User();
  user.setName("zhaoyanjun");
  user.setAge(20);
  user.setId(1);

  log.info("日志" + user.toString());

 }
}

@AllArgsConstructor 全參數(shù)構(gòu)造函數(shù)

package com.yanjun.mybatis.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Data //自動生成 get、set 方法
@AllArgsConstructor //自動生成全參數(shù)構(gòu)造函數(shù)
@Slf4j //日志打印
public class User {

 Integer id;

 String name;

 Integer age;

 public static void main(String[] args) {
  User user = new User(1, "zhaoyanjun", 20);

  log.info("日志" + user.toString());
 }
}

@ToString 自動生成toString方法

package com.yanjun.mybatis.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

@Data //自動生成 get、set 方法
@AllArgsConstructor //自動生成全參數(shù)構(gòu)造函數(shù)
@Slf4j //日志打印
@ToString(of = {"id","age"}) //tostring() 方法里面只打印 id ,name 字段
public class User {

 Integer id;

 String name;

 Integer age;

 public static void main(String[] args) {
  User user = new User(1, "zhaoyanjun", 20);

  log.info("日志" + user.toString());
 }
}

toString() 方法排除字段

//排除字段
@ToString(exclude = {"name"}) //tostring() 方法中,name 字段不參與打印

@Value 用于注解final類

@Value 注解和@Data類似,區(qū)別在于它會把所有成員變量默認(rèn)定義為 private final 修飾,并且不會生成set方法。

package com.yanjun.mybatis.bean;
import lombok.Value;

@Value
public class User {

 Integer id = 1;

 String name = "zhaoyanjun";

 Integer age = 3 ;
}

編譯后的代碼

public final class User {
 private final Integer id = 1;
 private final String name = "zhaoyanjun";
 private final Integer age = 3;

 public User() {
 }

 public Integer getId() {
  return this.id;
 }

 public String getName() {
  this.getClass();
  return "zhaoyanjun";
 }

 public Integer getAge() {
  return this.age;
 }

 //省略部分代碼
 ......
}

@Builder : 被注解的類加個構(gòu)造者模式

import lombok.Builder;

@Builder
public class User {

 public Integer id;

 public String name;

 public Integer age;
}

相當(dāng)于以下代碼

package com.yanjun.mybatis.bean;

public class User {
 public Integer id;
 public String name;
 public Integer age;

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

 public static User.UserBuilder builder() {
  return new User.UserBuilder();
 }

 public static class UserBuilder {
  private Integer id;
  private String name;
  private Integer age;

  UserBuilder() {
  }

  public User.UserBuilder id(Integer id) {
   this.id = id;
   return this;
  }

  public User.UserBuilder name(String name) {
   this.name = name;
   return this;
  }

  public User.UserBuilder age(Integer age) {
   this.age = age;
   return this;
  }

  public User build() {
   return new User(this.id, this.name, this.age);
  }

  public String toString() {
   return "User.UserBuilder(id=" + this.id + ", name=" + this.name + ", age=" + this.age + ")";
  }
 }
}

使用

UserBuilder userBuilder = User.builder();
User user = userBuilder
    .age(10)
    .id(1)
    .name("yanjun")
    .build();

System.out.println(": " + userBuilder.toString());

@Synchronized : 加個同步鎖

package com.yanjun.mybatis.bean;

import lombok.Synchronized;

public class User {

 public Integer age;

 public String name;

 //普通方法,相當(dāng)于對象鎖
 @Synchronized
 int run1() {
  return 1;
 }

 //靜態(tài)方法,相當(dāng)于類鎖
 @Synchronized
 static int run2() {
  return 2;
 }

}

代碼的效果相當(dāng)于

public class User {
 private final Object $lock = new Object[0];
 private static final Object $LOCK = new Object[0];
 public Integer age;
 public String name;

 public User() {
 }

 int run1() {
  Object var1 = this.$lock;
  synchronized(this.$lock) {
   return 1;
  }
 }

 static int run2() {
  Object var0 = $LOCK;
  synchronized($LOCK) {
   return 2;
  }
 }
}

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI