日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

SpringBoot 2.x 整合Lombok

發(fā)布時(shí)間:2024/9/30 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot 2.x 整合Lombok 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/zhaoyanjun6/article/details/80743302
本文出自【趙彥軍的博客】

簡(jiǎn)介

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

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

另外在項(xiàng)目開(kāi)發(fā)階段,一個(gè)class的屬性是一直變化的,今天可能增加一個(gè)字段,明天可能刪除一個(gè)字段。每次變化都需要修改對(duì)應(yīng)的模板代碼。另外,有的class的字段超級(jí)多,多到一眼看不完。如果加上模板代碼,更難一眼看出來(lái)。更有甚者,由于字段太多,想要使用builder來(lái)創(chuàng)建。手動(dòng)創(chuàng)建builder和字段和原來(lái)的類夾雜在一起,看起來(lái)很凌亂。lombok的@Builder即可解決這個(gè)問(wèn)題。

官網(wǎng)地址:https://projectlombok.org/

lombok最新版本號(hào):http://jcenter.bintray.com/org/projectlombok/lombok/

官方文檔: https://projectlombok.org/features/all

lombok 注解介紹: http://blog.csdn.net/sunsfan/article/details/53542374

安裝 lombok 插件

添加注解支持

添加依賴

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.8repositories {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 :注解在類上;為類提供一個(gè) 屬性名為log 的 log4j 日志對(duì)象
  • @NoArgsConstructor :注解在類上;為類提供一個(gè)無(wú)參的構(gòu)造方法
  • @AllArgsConstructor :注解在類上;為類提供一個(gè)全參的構(gòu)造方法
  • @Cleanup : 可以關(guān)閉流
  • @Builder : 被注解的類加個(gè)構(gòu)造者模式
  • @Synchronized : 加個(gè)同步鎖
  • @SneakyThrows : 等同于try/catch 捕獲異常
  • @NonNull : 如果給參數(shù)加個(gè)這個(gè)注解 參數(shù)為null會(huì)拋出空指針異常
  • @Value : 注解和@Data類似,區(qū)別在于它會(huì)把所有成員變量默認(rèn)定義為private final修飾,并且不會(huì)生成set方法。

@NonNull 判空處理

package com.yanjun.mybatis.bean;import lombok.Data; import lombok.NoArgsConstructor; import lombok.NonNull;@Data @NoArgsConstructor public class User {public Integer age;@NonNullpublic String name;}

相當(dāng)于

package com.yanjun.mybatis.bean;import lombok.NonNull;public class User {public Integer age;@NonNullpublic String name;public Integer getAge() {return this.age;}@NonNullpublic 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;}} }

測(cè)試

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

效果

Exception in thread "main" java.lang.NullPointerException: name is marked @NonNull but is nullat 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 //自動(dòng)生成 get、set 方法 public class User {Integer id;String name;Integer age;public static void main(String[] args) {//測(cè)試方法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 //自動(dòng)生成 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 //自動(dòng)生成 get、set 方法 @AllArgsConstructor //自動(dòng)生成全參數(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 自動(dòng)生成toString方法

package com.yanjun.mybatis.bean;import lombok.AllArgsConstructor; import lombok.Data; import lombok.ToString; import lombok.extern.slf4j.Slf4j;@Data //自動(dòng)生成 get、set 方法 @AllArgsConstructor //自動(dòng)生成全參數(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ū)別在于它會(huì)把所有成員變量默認(rèn)定義為 private final 修飾,并且不會(huì)生成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è)構(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 : 加個(gè)同步鎖

package com.yanjun.mybatis.bean;import lombok.Synchronized;public class User {public Integer age;public String name;//普通方法,相當(dāng)于對(duì)象鎖@Synchronizedint run1() {return 1;}//靜態(tài)方法,相當(dāng)于類鎖@Synchronizedstatic 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;}} }

個(gè)人微信號(hào):zhaoyanjun125 , 歡迎關(guān)注

總結(jié)

以上是生活随笔為你收集整理的SpringBoot 2.x 整合Lombok的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。