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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

springboot中使用websocket_Spring Boot中Lombok使用

發(fā)布時間:2025/3/15 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot中使用websocket_Spring Boot中Lombok使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Lombok是什么

Lombok是一個java庫,它自動插入到編輯器和構建工具中,增強java的性能。不要再編寫另一個getter或equals方法,使用一個注釋,您的類有一個功能齊全的生成器,自動記錄變量等等。簡而言之,使用Lombok可以極大減輕編碼工作量。

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

GitHub地址:https://github.com/rzwitserloot/lombok

Lombok安裝

IDEA Lombok插件安裝

在IDEA插件中心,查找Lombok,Install之后重啟IDEA。

插件安裝路徑:File->Settings->Plugins->Marketplace

IDEA安裝Lombok

項目引入依賴

我們以Spring Boot快速搭建中spring-boot-initializr-maven為例,添加Lombok依賴

<?xml ?version="1.0" encoding="UTF-8"?>? ?4.0.0? ?com.itlife? ?spring-boot-initializr-maven? ?1.0-SNAPSHOT? ?? ? ? ?org.springframework.boot? ? ? ?spring-boot-starter-parent? ? ? ?2.2.6.RELEASE? ? ? ??? ?? ?? ? ? ?1.8? ? ? ?1.16.18? ?? ?? ? ? ?? ? ? ? ? ?org.springframework.boot? ? ? ? ? ?spring-boot-starter-web? ? ? ?? ? ? ?? ? ? ?? ? ? ? ? ?org.projectlombok? ? ? ? ? ?lombok? ? ? ? ? ?${lombok.version}? ? ? ?? ?

Lombok使用與測試

創(chuàng)建User實體類

package?com.itlife.initializr.maven.entity;import?lombok.AllArgsConstructor;import?lombok.Data;import?lombok.NoArgsConstructor;/*** @author zhongsy* @date 2020/3/27*/@Data@AllArgsConstructor@NoArgsConstructorpublic?class?User?{? ?/**? ??* 用戶Id? ??*/? ?private?Long?id;? ?/**? ??* 用戶名稱? ??*/? ?private?String?name;}
  • @Data:相當于以下四個集合* @see Getter 自動生成Getter方法
    * @see Setter 自動生成Setter
    * @see RequiredArgsConstructor
    * @see ToString 自動生成toString()方法,默認情況,按順序(以“,”分隔)打印你的類名稱以及每個字段。
    * @see EqualsAndHashCode
  • @AllArgsConstructor 自動生成一個包含所有變量的構造方法
  • @NoArgsConstructor 自動生成一個無參構造方法

創(chuàng)建UserController測試類

package?com.itlife.initializr.maven.controller;import?com.itlife.initializr.maven.entity.User;import?lombok.extern.slf4j.Slf4j;import?org.springframework.web.bind.annotation.GetMapping;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestParam;import?org.springframework.web.bind.annotation.RestController;/*** @author zhongsy* @date 2020/3/27*/@RestController@Slf4j@RequestMapping("user")public?class?UserController?{? ?@GetMapping("hello")? ?public?String?hello(User?user) {? ? ? ?log.info("收到用戶信息 {}",?user);? ? ? ?return?"hi, "?+?user?+?"!";? }}
  • @Slf4j:產(chǎn)生一個logger field,相當于private static final Logger log = LoggerFactory.getLogger(UserController.class);

啟動Spring Boot測試

  • 在瀏覽器輸入測試地址 http://localhost:8080/user/hello?id=1&name=itLife,如果返回hi, User(id=1, name=itLife)!,表明使用成功

執(zhí)行結果

修改User實體類

package?com.itlife.initializr.maven.entity;import?lombok.AllArgsConstructor;import?lombok.Data;import?lombok.NoArgsConstructor;import?lombok.ToString;/*** @author zhongsy* @date 2020/3/27*/@Data@AllArgsConstructor@NoArgsConstructor@ToStringpublic?class?User?{? ?/**? ??* 用戶Id? ??*/? ?private?Long?id;? ?/**? ??* 用戶名稱? ??*/? ?private?String?name;? ?/**? ??* 測試重新toString與Lombok注解沖突? ??*/? ?@Override? ?public?String?toString() {? ? ? ?return?"User By Test {"?+? ? ? ? ? ? ? ?"id="?+?id?+? ? ? ? ? ? ? ?", name='"?+?name?+?'''?+? ? ? ? ? ? ? ?'}';? }}

再次啟動Spring Boot測試

  • 在瀏覽器輸入測試地址 http://localhost:8080/user/hello?id=1&name=itLife,如果返回hi, User(id=1, name=itLife)!,表明使用成功

通過測試,如果Lombok與用戶所寫代碼有重復的話,以用戶代碼為準

Lombok原理解析

反編譯User.class

Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)//package?com.itlife.initializr.maven.entity;import?java.beans.ConstructorProperties;public?class?User?{? ?private?Long?id;? ?private?String?name;? ?public?Long?getId() {? ? ? ?return?this.id;? }? ?public?String?getName() {? ? ? ?return?this.name;? }? ?public?void?setId(final?Long?id) {? ? ? ?this.id?=?id;? }? ?public?void?setName(final?String?name) {? ? ? ?this.name?=?name;? }? ?public?boolean?equals(final?Object?o) {? ? ? ?if?(o?==?this) {? ? ? ? ? ?return?true;? ? ? }?else?if?(!(o?instanceof?User)) {? ? ? ? ? ?return?false;? ? ? }?else?{? ? ? ? ? ?User?other?=?(User)o;? ? ? ? ? ?if?(!other.canEqual(this)) {? ? ? ? ? ? ? ?return?false;? ? ? ? ? }?else?{? ? ? ? ? ? ? ?Object?this$id?=?this.getId();? ? ? ? ? ? ? ?Object?other$id?=?other.getId();? ? ? ? ? ? ? ?if?(this$id?==?null) {? ? ? ? ? ? ? ? ? ?if?(other$id?!=?null) {? ? ? ? ? ? ? ? ? ? ? ?return?false;? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? }?else?if?(!this$id.equals(other$id)) {? ? ? ? ? ? ? ? ? ?return?false;? ? ? ? ? ? ? }? ? ? ? ? ? ? ?Object?this$name?=?this.getName();? ? ? ? ? ? ? ?Object?other$name?=?other.getName();? ? ? ? ? ? ? ?if?(this$name?==?null) {? ? ? ? ? ? ? ? ? ?if?(other$name?!=?null) {? ? ? ? ? ? ? ? ? ? ? ?return?false;? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? }?else?if?(!this$name.equals(other$name)) {? ? ? ? ? ? ? ? ? ?return?false;? ? ? ? ? ? ? }? ? ? ? ? ? ? ?return?true;? ? ? ? ? }? ? ? }? }? ?protected?boolean?canEqual(final?Object?other) {? ? ? ?return?other?instanceof?User;? }? ?public?int?hashCode() {? ? ? ?int?PRIME?=?true;? ? ? ?int?result?=?1;? ? ? ?Object?$id?=?this.getId();? ? ? ?int?result?=?result?*?59?+?($id?==?null???43?:?$id.hashCode());? ? ? ?Object?$name?=?this.getName();? ? ? ?result?=?result?*?59?+?($name?==?null???43?:?$name.hashCode());? ? ? ?return?result;? }? ?public?String?toString() {? ? ? ?return?"User(id="?+?this.getId()?+?", name="?+?this.getName()?+?")";? }? ?@ConstructorProperties({"id",?"name"})? ?public?User(final?Long?id,?final?String?name) {? ? ? ?this.id?=?id;? ? ? ?this.name?=?name;? }? ?public?User() {? }}

反編譯UserController.class

Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)//package?com.itlife.initializr.maven.controller;import?com.itlife.initializr.maven.entity.User;import?org.slf4j.Logger;import?org.slf4j.LoggerFactory;import?org.springframework.web.bind.annotation.GetMapping;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping({"user"})public?class?UserController?{? ?private?static?final?Logger?log?=?LoggerFactory.getLogger(UserController.class);? ?public?UserController() {? }? ?@GetMapping({"hello"})? ?public?String?hello(User?user) {? ? ? ?log.info("收到用戶信息 {}",?user);? ? ? ?return?"hi, "?+?user?+?"!";? }}

工作原理說明

通過反編譯即可知道,Lombok在生成class文件的時候,會根據(jù)注解進行代碼生成相應代碼,使得我們代碼更加簡潔。其核心之處就是對于注解的解析上。JDK5引入了注解的同時,也提供了兩種解析方式。分別是運行時解析和編譯時解析兩種。具體如何實現(xiàn),可以自行查閱官網(wǎng)或者進行源碼閱讀。

總結

優(yōu)點

  • Lombok最大的好處就在于通過注解的形式來簡化Java代碼。減少大量的模板代碼,一定程度提高代碼可讀性,可以專注于查看類的屬性。
  • 缺點

  • 環(huán)境配置,需要集成開發(fā)工具IDEA、Eclipse之類支持
  • 一旦項目中有人使用Lombok插件,會導致其他人也必須安裝
  • 使用建議

    項目中除非是老項目,不然建議使用。新的項目,建議采用。使用Lombok可以極大減少代碼量,更加專注于查看類的屬性。如果對于有特殊性要求,可以在使用Lombok的同時自行寫相應的方法。

    總結

    以上是生活随笔為你收集整理的springboot中使用websocket_Spring Boot中Lombok使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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