Knife4j的原理及應用詳解(三)

本系列文章簡介:

????????在當今快速發展的軟件開發領域,API(Application Programming Interface,應用程序編程接口)作為不同軟件應用之間通信的橋梁,其重要性日益凸顯。隨著微服務架構的興起,API的數量和復雜度急劇增加,如何高效地管理和維護這些API文檔成為了開發者們面臨的一大挑戰。傳統的文檔編寫方式往往依賴于手工操作,不僅效率低下且容易出錯,難以滿足現代軟件開發的需求。

????????Swagger,作為一款開源的API文檔生成工具,憑借其自動化生成文檔、支持多種語言及框架等特點,迅速在開發者中贏得了廣泛的認可。然而,Swagger的默認UI界面在美觀性和用戶體驗方面仍有提升空間,特別是對于追求高效和良好用戶體驗的現代應用而言。

????????正是在這樣的背景下,Knife4j應運而生。作為Swagger的增強解決方案,Knife4j不僅繼承了Swagger強大的文檔生成能力,還通過定制化的UI界面、增強的交互功能以及更靈活的配置選項,為開發者們提供了一個更加高效、易用且美觀的API文檔管理工具。

????????本系列文章旨在深入探討Knife4j的原理及其應用。首先,我們將簡要介紹Knife4j的基本概念、主要功能及特點,以便讀者對其有一個初步的了解。隨后,我們將深入分析Knife4j的工作原理,包括它是如何與Swagger集成的、如何解析Swagger注解并生成API文檔的,以及它如何通過定制化的UI界面和增強的交互功能來提升用戶體驗。

????????希望通過全面而深入的剖析,幫助大家更好地理解并掌握Knife4j的原理及其應用,從而為現代軟件開發中的API文檔管理提供有力的支持。

????????歡迎大家訂閱《Java技術棧高級攻略》專欄(PS:近期會漲價),一起學習,一起漲分!

目錄

一、引言

二、Knife4j的原理

2.1 Swagger基礎原理

2.1.1 Swagger注解與文檔生成流程

2.1.2 OpenAPI規范介紹

2.2 Knife4j對Swagger的擴展與增強

2.2.1 UI界面的定制與優化

2.2.2 文檔生成機制的增強

2.2.3 支持Swagger注解以外的擴展機制

2.3 核心技術解析

三、Knife4j的應用

四、Knife4j與其他工具的對比

五、案例分析

六、結論與展望

七、結語


一、引言

????????Knife4j是一個基于Swagger構建的開源Java API文檔工具,它為Java開發者提供了生成、展示和調試API文檔的強大功能。Knife4j的前身是swagger-bootstrap-ui,取名Knife4j是希望它能像一把匕首一樣小巧、輕量且功能強悍。Knife4j是專為Java MVC框架集成的Swagger生成Api文檔的增強解決方案,旨在簡化接口文檔的編寫和管理過程。

????????本文將跟隨《Knife4j的原理及應用詳解(二)》的進度,繼續介紹Knife4j。希望通過本系列文章的學習,您將能夠更好地理解Knife4j的內部工作原理,掌握Knife4j的使用技巧,以及通過合理的設計完成最佳實踐,充分發揮優化Knife4j的潛力,為系統的高效運行提供有力保障。

二、Knife4j的原理

2.1 Swagger基礎原理

2.1.1 Swagger注解與文檔生成流程

Swagger注解與文檔生成流程是一個高效、自動化的過程,它允許開發者在編寫代碼的同時,通過添加特定的注解來自動生成API文檔。以下是Swagger注解與文檔生成的詳細流程:

1. 添加Swagger依賴

首先,需要在項目的構建文件中(如Maven的pom.xml或Gradle的build.gradle)添加Swagger的依賴項。這些依賴項通常包括Swagger的核心庫(如springfox-swagger2)和Swagger UI庫(如springfox-swagger-ui),用于生成和展示API文檔。

例如,在Maven項目中,可以添加如下依賴:

<!-- Swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> <!-- 注意:版本號可能隨時間更新,請根據實際情況選擇 --> </dependency> <!-- Swagger-UI --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> <!-- 注意:版本號應與springfox-swagger2保持一致 --> </dependency>

2. 配置Swagger

接下來,需要創建一個配置類來配置Swagger。在這個配置類中,通常會定義一個或多個Docket實例,用于指定哪些包或類應該被Swagger掃描以生成API文檔。此外,還可以在這個類中自定義API文檔的元數據,如標題、描述和版本信息等。

例如:

@Configuration @EnableSwagger2 // 啟用Swagger2 public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.yourcompany.yourproject")) // 指定掃描的包 .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("你的項目API文檔") .description("這里是項目的詳細描述") .version("1.0") .build(); } }

3. 在代碼中使用Swagger注解

在完成了Swagger的依賴添加和配置之后,就可以在代碼中通過添加Swagger注解來生成API文檔了。Swagger提供了多種注解,用于描述API的不同方面,如接口、方法、參數和響應等。

常用的Swagger注解包括:

  • @Api:用于Controller類上,描述整個類的作用。
  • @ApiOperation:用于Controller類中的方法上,描述方法的作用。
  • @ApiParam:用于方法參數上,描述參數的作用。
  • @ApiModel:用于實體類上,描述實體類的作用。
  • @ApiModelProperty:用于實體類的屬性上,描述屬性的作用。

例如:

@RestController @Api(tags = "用戶管理") public class UserController { @GetMapping("/users/{id}") @ApiOperation(value = "根據ID查詢用戶", notes = "根據用戶ID查詢用戶信息") @ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "Long") public User getUserById(@PathVariable Long id) { // 方法實現 } }

4. 訪問Swagger UI

最后,啟動項目并訪問Swagger UI的URL(通常是http://localhost:<端口>/swagger-ui.html),就可以看到自動生成的API文檔了。在這個頁面上,可以瀏覽API的接口列表、查看接口的詳細信息、進行接口測試等。

總結

Swagger注解與文檔生成流程是一個簡單而強大的工具,它可以幫助開發者在編寫代碼的同時自動生成API文檔,極大地提高了開發效率和API文檔的可用性。通過遵循上述步驟,開發者可以輕松地在自己的項目中集成和使用Swagger。

2.1.2 OpenAPI規范介紹

Swagger基礎原理中的OpenAPI規范介紹,可以從以下幾個方面進行闡述:

1、OpenAPI規范概述

OpenAPI規范(OpenAPI Specification,OAS),以前稱為Swagger規范,是一種用于描述RESTful API的規范和工具集合。它為HTTP API定義了一個與語言無關的標準接口,使得人和計算機都可以在不使用源代碼、文檔或監聽網絡通信的情況下,具備發現和理解服務的能力。OpenAPI規范允許開發者以一種標準化的方式描述他們的API,包括API的路徑、請求參數、響應參數、認證方法等,從而提高了API的可讀性和可維護性。

2、OpenAPI規范的主要特點

  1. 語言無關性:OpenAPI規范是一種與編程語言無關的標準,因此它適用于各種編程語言和平臺。
  2. 標準化:OpenAPI規范為RESTful API提供了一個統一的描述格式,使得不同的系統和組件之間可以更加方便地進行交互。
  3. 機器可讀性:OpenAPI規范采用YAML或JSON格式編寫,這使得機器可以輕松地解析和處理API描述文件。
  4. 豐富的功能:OpenAPI規范支持多種高級功能,如請求和響應的驗證、參數傳遞方式等,為開發者提供了更多的靈活性和控制能力。

3、OpenAPI規范的應用場景

  1. API文檔生成:使用OpenAPI規范可以自動生成API文檔,這些文檔包含了API的所有相關信息,如請求參數、響應參數、錯誤碼等,方便開發者了解和使用API。
  2. 代碼生成:基于OpenAPI規范,可以生成各種編程語言的服務器和客戶端代碼,從而加速API的開發和部署過程。
  3. API測試和調試:OpenAPI規范支持多種測試和調試工具,如Postman、Apifox等,這些工具可以根據OpenAPI規范定義的API描述文件進行測試和調試工作。

4、OpenAPI規范與Swagger的關系

Swagger是一套圍繞OpenAPI規范構建的開源工具,它提供了多種工具來幫助開發者設計、構建、記錄和使用REST API。Swagger工具包括Swagger Editor(基于瀏覽器的編輯器,用于編寫OpenAPI規范)、Swagger UI(將OpenAPI規范呈現為交互式API文檔的工具)、Swagger Codegen(將OpenAPI規范生成為服務器存根和客戶端庫的工具)等。通過使用Swagger工具,開發者可以更加方便地管理和使用OpenAPI規范定義的API。

5、總結

OpenAPI規范是現代軟件開發中用于描述RESTful API的一種重要規范和工具集合。它提供了一種標準化的方式來描述API,使得不同的系統和組件之間可以更加方便地進行交互。同時,OpenAPI規范還支持多種高級功能和工具,為開發者提供了更多的靈活性和控制能力。通過學習和使用OpenAPI規范,開發者可以更加高效地開發和管理RESTful API。

2.2 Knife4j對Swagger的擴展與增強

2.2.1 UI界面的定制與優化

Knife4j對Swagger的擴展與增強主要體現在UI界面的定制與優化上,以下是對這一方面的詳細闡述:

1、Knife4j簡介

Knife4j是一個基于Swagger UI的增強版UI框架,專為Java MVC框架集成Swagger以生成API文檔提供增強型解決方案。它源自swagger-bootstrap-ui,經過升級和重塑,現在更專注于微服務環境下的靈活性與高效性。Knife4j旨在提供一個輕量化、功能強大的工具,使開發者能夠輕松構建和維護高質量的API文檔。

2、Knife4j對Swagger UI界面的定制與優化

  1. UI界面的美化
    • 更加美觀的UI設計:Knife4j在Swagger UI的基礎上進行了改進和優化,提供了更加美觀的界面設計,提升了用戶的視覺體驗。
    • 支持多語言:Knife4j支持多種常用語言,如中文、英文、日文等,可以在配置文件中設置語言屬性來配置文檔界面語言,方便不同地區的用戶使用。
  2. 增強的交互體驗
    • 實時調試功能:Knife4j內置了接口調試功能,允許開發者在文檔頁面上進行實時測試,直接看到接口的響應結果,大大提高了開發效率。
    • 接口排序與搜索:Knife4j提供了接口排序和搜索功能,方便開發者快速定位到需要查看或測試的接口。
    • 參數預填充:對于某些需要頻繁輸入的參數,Knife4j支持參數預填充功能,減少了重復輸入的工作量。
  3. 高度定制化
    • 前端源碼開放:Knife4j提供了Vue2.0和Vue3.0版本的前端源碼,方便開發者根據項目需求進行定制和擴展。
    • 模塊化設計:Knife4j采用了模塊化設計,開發人員可以根據項目需求選擇合適的組件進行集成和使用。
  4. 適應微服務架構
    • 前后端解耦:Knife4j的設計使得前后端可以解耦,方便在微服務架構中獨立部署和使用。
    • 分布式系統支持:在分布式系統中,每個服務都可以獨立部署Knife4j,實現API文檔的自動化生成和管理。

3、整合與使用

要在Spring Boot項目中整合Knife4j,通常需要進行以下步驟:

  1. 添加依賴:在項目的pom.xml文件中添加Knife4j的依賴項。
  2. 配置Swagger和Knife4j:在Spring Boot的配置文件(如application.propertiesapplication.yml)中添加Swagger和Knife4j的相關配置。
  3. 編寫API文檔:使用Swagger注解(如@Api@ApiOperation等)編寫API文檔。
  4. 訪問Knife4j界面:啟動Spring Boot應用后,通過配置的訪問路徑(如http://localhost:8080/doc.html)訪問Knife4j的UI界面。

4、總結

Knife4j通過對Swagger UI界面的定制與優化,提供了更加美觀、易用、功能強大的API文檔管理工具。它不僅美化了界面設計,還增強了交互體驗,支持多語言、實時調試、接口排序與搜索等高級功能。同時,Knife4j的高度定制化特性和對微服務架構的支持,使得它成為Java開發環境下構建高質量API文檔的首選工具。

2.2.2 文檔生成機制的增強

Knife4j作為Swagger的一個增強工具,在文檔生成機制上進行了多方面的擴展與增強。以下是Knife4j對Swagger文檔生成機制的增強點:

1. 更好的UI界面與用戶體驗

  • 美觀的界面設計:Knife4j在原生Swagger-UI的基礎上進行了大量優化,提供了更美觀、更直觀的UI界面,使得API文檔的查閱和測試體驗更加友好。
  • 實時更新:支持實時更新接口文檔,當代碼發生變化時,文檔內容會自動同步更新,確保文檔與實際代碼始終保持一致。
  • 響應示例折疊/展開:提供響應示例的折疊/展開功能,方便開發者查看和測試API的響應數據。

2. 強大的個性化定制能力

  • 個性化配置項:Knife4j支持接口地址、接口description屬性、UI增強等個性化配置功能,滿足不同團隊的個性化需求。
  • 離線文檔導出:提供離線文檔導出功能,方便開發者在沒有網絡的環境下查閱API文檔。
  • 全局參數設置:支持全局參數設置,減少在每個接口中重復設置參數的繁瑣。

3. 豐富的擴展功能

  • 接口排序與篩選:允許用戶按照接口分組、標簽、路徑等多種方式對API進行排序和篩選,方便快速定位所需接口。
  • 在線調試:提供在線調試功能,開發者可以直接在Knife4j界面中發送請求并查看響應結果,無需編寫額外的測試代碼。
  • 模型樹結構展示:對于復雜的請求或響應模型,Knife4j以樹形結構展示其屬性,使得模型結構更加清晰易懂。

4. 安全與權限控制

  • OAuth2認證支持:Knife4j無縫集成OAuth2認證,支持多種授權類型,便于在安全環境下調試API。
  • 生產環境屏蔽:提供生產環境屏蔽功能,可以在生產環境中關閉Swagger/Knife4j的訪問,確保API文檔的安全性。

5. 易于集成與配置

  • 快速集成:Knife4j提供了starter包,使得在Spring Boot項目中集成Knife4j變得非常簡單快捷。
  • 靈活配置:通過配置文件或注解的方式,可以輕松配置Knife4j的各項參數和功能。

6. 持續的更新與維護

  • 活躍的社區支持:Knife4j由國人程序員蕭明于2017年開源,至今仍在持續更新和維護中,擁有活躍的社區支持。
  • 廣泛的兼容性:Knife4j與Swagger保持高度兼容,同時也在不斷擴展和優化自身的功能。

綜上所述,Knife4j在文檔生成機制上通過提供更好的UI界面、強大的個性化定制能力、豐富的擴展功能、安全與權限控制、易于集成與配置以及持續的更新與維護等方面的增強,極大地提升了Swagger文檔生成機制的實用性和易用性。

2.2.3 支持Swagger注解以外的擴展機制

Knife4j作為Swagger的增強工具,不僅保留了Swagger的核心功能,如通過注解自動生成API文檔,還提供了多種擴展機制來進一步滿足開發者的需求。以下是Knife4j支持Swagger注解以外的擴展機制的幾個方面:

1. 豐富的UI界面定制

  • 界面美化:Knife4j對Swagger UI進行了深度定制和優化,提供了更加美觀、易用的界面,增強了用戶體驗。
  • 布局調整:開發者可以根據項目需求,調整文檔頁面的布局、顏色、字體等,以符合項目的整體風格。

2. 多種注解配置方式

  • 擴展注解:除了支持Swagger的原生注解外,Knife4j還提供了額外的注解或配置方式,使開發者能夠更加靈活地定義API文檔。
  • 分組管理:通過配置類,開發者可以對API進行分組管理,使得文檔結構更加清晰。

3. 插件擴展機制

  • 內置插件:Knife4j內置了多種插件,如權限控制、接口排序、搜索功能等,這些插件可以直接使用,無需額外開發。
  • 自定義插件:Knife4j提供了插件開發接口,開發者可以根據自己的需求,編寫自定義的插件來擴展Knife4j的功能。

4. 動態配置與屬性調整

  • 配置文件:Knife4j支持通過配置文件來調整API文檔的屬性,如文檔標題、描述、版本等,無需修改代碼即可實現動態更新。
  • 動態調整:在部分場景下,開發者可能需要在運行時動態調整API文檔的某些屬性。Knife4j提供了相應的機制,允許開發者通過編程方式來實現這一需求。

5. 安全性與權限控制

  • OAuth2支持:Knife4j無縫集成OAuth2認證,支持多種授權類型,可以在安全環境下調試API。
  • 權限管理:開發者可以通過配置或編寫自定義插件來實現對API文檔的權限管理,確保只有授權用戶才能訪問敏感信息。

6. 社區與生態支持

  • 活躍社區:Knife4j擁有活躍的社區支持,開發者可以在社區中交流經驗、提出問題并獲得幫助。
  • 生態擴展:隨著Knife4j的不斷發展,越來越多的開發者和團隊開始使用它,并為其貢獻插件和擴展功能,進一步豐富了Knife4j的生態系統。

綜上所述,Knife4j通過豐富的UI界面定制、多種注解配置方式、插件擴展機制、動態配置與屬性調整、安全性與權限控制以及社區與生態支持等方面的擴展機制,為開發者提供了更加靈活、強大的API文檔生成和管理工具。

2.3 核心技術解析

???????詳見《Knife4j的原理及應用詳解(四)

三、Knife4j的應用

???????詳見《Knife4j的原理及應用詳解(五)

四、Knife4j與其他工具的對比

???????詳見《Knife4j的原理及應用詳解(六)

五、案例分析

????????詳見《Knife4j的原理及應用詳解(七)

六、結論與展望

????????詳見《Knife4j的原理及應用詳解(七)

七、結語

? ? ? ? 文章至此,已接近尾聲!希望此文能夠對大家有所啟發和幫助。同時,感謝大家的耐心閱讀和對本文檔的信任。在未來的技術學習和工作中,期待與各位大佬共同進步,共同探索新的技術前沿。最后,再次感謝各位的支持和關注。您的支持是作者創作的最大動力,如果您覺得這篇文章對您有所幫助,請分享給身邊的朋友和同事!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43397.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43397.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43397.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

價值投資者什么時候賣出股票?

經常有人說&#xff0c;會買的只是徒弟&#xff0c;會賣的才是師傅。 在閱讀《戰勝華爾街》的過程中&#xff0c;也多次感受到林奇先生的賣出邏輯&#xff0c;當股票的價格充分體現了公司的價值的時候&#xff0c;就是該賣出股票的時候。但這只是理論上的&#xff0c;從林奇先…

數據中臺指標管理系統

您所描述的是一個數據中臺指標管理系統&#xff0c;它基于Spring Cloud技術棧構建。數據中臺是企業數據管理和應用的中心平臺&#xff0c;它整合了企業內外部的數據資源&#xff0c;提供數據服務和數據管理能力。以下是您提到的各個模塊的簡要概述&#xff1a; 1. **首頁**&am…

JSP WEB開發(四) MVC模式

MVC模式介紹 MVC&#xff08;Model-View-Controller&#xff09;是一種軟件設計模式&#xff0c;最早出現在Smalltalk語言中&#xff0c;后來在Java中得到廣泛應用&#xff0c;并被Sun公司推薦為Java EE平臺的設計模式。它把應用程序分成了三個核心模塊&#xff1a;模型層、視…

2024年有多少程序員轉行了?

疫情后大環境下行&#xff0c;各行各業的就業情況都是一言難盡。互聯網行業更是極不穩定&#xff0c;頻頻爆出裁員的消息。大家都說2024年程序員的就業很難&#xff0c;都很焦慮。 在許多人眼里&#xff0c;程序員可能是一群背著電腦、進入高大上寫字樓的職業&#xff0c;他們…

SVN 80道面試題及參考答案(2萬字長文)

目錄 解釋SVN的全稱和主要功能。 SVN與CVS相比,有哪些主要改進? 描述SVN的工作流程。 什么是版本庫(repository)?它存儲了什么? 解釋工作副本(working copy)的概念。 SVN如何處理文件的版本控制? SVN中的“commit”是什么意思? 解釋“update”操作的作用。 如何…

Datawhale AI 夏令營 機器學習挑戰賽

一、賽事背景 在當今科技日新月異的時代&#xff0c;人工智能&#xff08;AI&#xff09;技術正以前所未有的深度和廣度滲透到科研領域&#xff0c;特別是在化學及藥物研發中展現出了巨大潛力。精準預測分子性質有助于高效篩選出具有優異性能的候選藥物。以PROTACs為例&#x…

Hi3861 OpenHarmony嵌入式應用入門--MQTT

MQTT 是機器對機器(M2M)/物聯網(IoT)連接協議。它被設計為一個極其輕量級的發布/訂閱消息傳輸 協議。對于需要較小代碼占用空間和/或網絡帶寬非常寶貴的遠程連接非常有用&#xff0c;是專為受限設備和低帶寬、 高延遲或不可靠的網絡而設計。這些原則也使該協議成為新興的“機器…

AutoMQ 生態集成 Kafdrop-ui

Kafdrop [1] 是一個為 Kafka 設計的簡潔、直觀且功能強大的Web UI 工具。它允許開發者和管理員輕松地查看和管理 Kafka 集群的關鍵元數據&#xff0c;包括主題、分區、消費者組以及他們的偏移量等。通過提供一個用戶友好的界面&#xff0c;Kafdrop 大大簡化了 Kafka 集群的監控…

量產工具一一UI系統(四)

目錄 前言 一、按鈕數據結構抽象 1.ui.h 二、按鍵處理 1.button.c 2.disp_manager.c 3.disp_manager.h 三、單元測試 1.ui_test.c 2.上機測試 前言 前面我們實現了顯示系統框架&#xff0c;輸入系統框架和文字系統框架&#xff0c;鏈接&#xff1a; 量產工具一一顯…

Redis 底層數據結構

? 簡單動態字符串 ? 鏈表 ? 字典 ? 跳躍表 ? 整數集合 ? 壓縮列表 ? 對象 SDS 增加了len和free屬性&#xff0c;記錄buf數組的使用空間和剩余空間。好處:strken函數直接讀取len值&#xff0c;時間復雜度是O(1)&#xff1b;預分配buf長度&#xf…

集控中心操作臺材質選擇如何選擇

作為集控中心的核心組成部分&#xff0c;操作臺不僅承載著各種設備和工具&#xff0c;更是工作人員進行監控、操作和管理的重要平臺。因此&#xff0c;選擇適合的集控中心操作臺材質顯得尤為重要。 一、材質選擇的考量因素 在選擇集控中心操作臺材質時&#xff0c;我們需要綜合…

SpringCloud跨微服務的遠程調用,如何發起網絡請求,RestTemplate

在我們的業務流程之中不一定都會是自己模塊查詢自己模塊的信息&#xff0c;有些時候就需要去結合其他模塊的信息來進行一些查詢完成相應的業務流程&#xff0c;但是在SpringCloud每個模塊都相對獨立&#xff0c;數據庫也有數據隔離。所以當我們需要其他微服務模塊的信息的時候&…

什么是SpringCloud Stream?

Spring Cloud Stream 是一個構建消息驅動微服務的框架&#xff0c;其基于Spring Boot來開發&#xff0c;并使用Spring Integration來連接消息代理中間件。該項目的目標是提供一套用于開發消息驅動應用的通用模型&#xff0c;并定義了用于發送和接收消息的綁定器&#xff08;Bin…

前端javascript中的排序算法之選擇排序

選擇排序&#xff08;Selection Sort&#xff09;基本思想&#xff1a; 是一種原址排序法&#xff1b; 將數組分為兩個區間&#xff1a;左側為已排序區間&#xff0c;右側為未排序區間。每趟從未排序區間中選擇一個值最小的元素&#xff0c;放到已排序區間的末尾&#xff0c;從…

玩轉springboot之為什么springboot可以直接執行

為什么springboot可以直接執行 先看一下springboot打包生成的MANIFEST.MF內容是什么 Manifest-Version: 1.0Implementation-Title: exam-adminImplementation-Version: 1.0-SNAPSHOTStart-Class: com.zhanghe.exam.ApplicationSpring-Boot-Classes: BOOT-INF/classes/Spring-Bo…

小米采取措施禁止國行版設備安裝國際版系統 刷機后將報錯無法進入系統

據知名官改版系統 Xiaomi.EU 測試者 Kacper Skrzypek 發布的消息&#xff0c;小米目前已經在開機引導中新增區域檢測機制&#xff0c;該機制將識別硬件所屬的市場版本&#xff0c;例如中國大陸市場銷售的小米即將在安裝國際版系統后將無法正常啟動。 測試顯示該檢測機制是在開…

1.DDR3 SO-DIMM 內存條硬件總結

最近在使用fpga讀寫DDR3&#xff0c;板子上的DDR3有兩種形式與fpga相連&#xff0c;一種是直接用ddr3內存顆粒&#xff0c;另一種是通過內存條的形式與fpga相連。這里我們正好記錄下和ddr3相關的知識&#xff0c;先從DDR3 SO-DIMM 內存條開始。 1.先看內存條的版本 從JEDEC下載…

四步帶你實現【Open3d】--邊緣檢測

Open3D邊緣檢測技術從3D數據中精準識別并提取邊界&#xff0c;對于場景解析、物體輪廓提取等任務至關重要。Open3D提供多種算法&#xff0c;幫助用戶高效實現邊緣檢測&#xff0c;促進3D數據的深度分析和應用。 一、安裝 pip install open3d # 即可 二、使用 首先&#…

《算法筆記》總結No.5——遞歸

一.分而治之 將原問題劃分為若干個規模較小而結構與原問題相同或相似的子問題&#xff0c;然后分別解決這些子問題&#xff0c;最后合并子問題的解&#xff0c;即可得到原問題的解&#xff0c;步驟抽象如下&#xff1a; 分解&#xff1a;將原問題分解為若干子問題解決&#x…

用VLM訓練實時計算機視覺模型

經過數十億個參數訓練的 AI 模型非常強大&#xff0c;但并不總是適合實時使用。但是&#xff0c;它們可以通過自動監督快速專用模型的標注來減少人力投入。 ? 如果你曾經構建過計算機視覺模型&#xff0c;就就會知道監督需要大量工作——人類花時間&#xff08;數小時或數天&a…