Micronaut FAQ

2023-03-15 11:10 更新

以下部分涵蓋了您在考慮使用或使用 Micronaut 時可能會問到的常見問題。

Micronaut 會修改我的字節(jié)碼嗎?

不,你的類就是你的類。Micronaut不會轉(zhuǎn)換類,也不會修改從你寫的代碼中生成的字節(jié)碼。Micronaut在編譯時產(chǎn)生額外的類,與你原來未修改的類在同一個包中。

為什么 Micronaut 不使用 Spring?

當(dāng)問到為什么 Micronaut 不使用 Spring 時,通常是指 Spring 依賴注入容器。

Spring 生態(tài)系統(tǒng)非常廣泛,您可以在 Micronaut 中直接使用許多 Spring 庫,而無需 Spring 容器。

Micronaut 具有自己的原生 JSR-330 兼容依賴注入的原因是 Spring(以及任何基于反射的 DI/AOP 容器)中這些功能的成本在內(nèi)存消耗和對啟動時間的影響方面太大了。為了在運行時支持依賴注入,Spring:

  • 讀取它在運行時找到的每個 bean 的字節(jié)碼。

  • 為每個 bean 方法、構(gòu)造函數(shù)、字段等上的每個注釋合成新注釋以支持注釋元數(shù)據(jù)。

  • 為每個方法、構(gòu)造函數(shù)、字段等的每個 bean 構(gòu)建反射元數(shù)據(jù)。

結(jié)果是隨著您的應(yīng)用程序包含更多功能,啟動時間和內(nèi)存消耗逐漸減少。

對于啟動時間和內(nèi)存消耗保持低水平至關(guān)重要的微服務(wù)和無服務(wù)器功能,上述行為是使用 Spring 容器的不良現(xiàn)實,因此 Micronaut 的設(shè)計者選擇不使用 Spring。

Micronaut 支持 Scala 嗎?

Micronaut 支持任何支持注釋處理器 API 的 JVM 語言。 Scala 目前不支持這個 API。但是,Groovy 也不支持此 API,并且已經(jīng)構(gòu)建了處理 Groovy AST 的特殊支持。如果構(gòu)建類似于 inject-groovy 的模塊,將來在技術(shù)上可能會支持 Scala,但在撰寫本文時,Scala 尚不支持。

Micronaut 可以用于微服務(wù)以外的目的嗎?

是的。 Micronaut 是非常模塊化的,您可以通過在應(yīng)用程序中包含 micronaut-inject-java(或 micronaut-inject-groovy for Groovy)依賴項來選擇僅使用依賴注入和 AOP 實現(xiàn)。

事實上,Micronaut 對無服務(wù)器計算的支持正是使用了這種方法。

Micronaut 的 Dependency Injection 和 AOP 實現(xiàn)有什么優(yōu)勢?

Micronaut 在編譯時處理您的類并生成所有元數(shù)據(jù)。這消除了對反射、緩存反射元數(shù)據(jù)的需要,以及在運行時分析類的要求,所有這些都會導(dǎo)致啟動性能變慢和內(nèi)存消耗增加。

此外,Micronaut 在編譯時構(gòu)建無反射 AOP 代理,從而提高性能、減少堆棧跟蹤大小并減少內(nèi)存消耗。

為什么 Micronaut 有自己的 Consul 和 Eureka 客戶端實現(xiàn)?

現(xiàn)有的大多數(shù) Consul 和 Eureka 客戶端都是阻塞的,并且包含許多使 JAR 文件膨脹的外部依賴項。

Micronaut 的 DiscoveryClient 使用 Micronaut 的原生 HTTP 客戶端,大大減少了對外部依賴的需求,并在兩個發(fā)現(xiàn)服務(wù)器上提供了一個反應(yīng)式 API。

為什么我在加載 bean (Groovy) 時遇到 NoSuchMethodError?

Groovy 默認(rèn)導(dǎo)入 groovy.lang 包中的類,包括一個名為 @Singleton 的類,這是一個 AST 轉(zhuǎn)換類,它通過添加私有構(gòu)造函數(shù)和靜態(tài)檢索方法使您的類成為單例。這個注釋很容易與用于在 Micronaut 中定義單例 bean 的 javax.inject.Singleton 注釋混淆。確保在 Groovy 類中使??用正確的注解。

為什么啟動應(yīng)用程序花費的時間比應(yīng)有的時間長得多

Micronaut 的啟動時間通常非常快。但是,在應(yīng)用程序級別,可能會影響啟動時間。如果您看到啟動緩慢,請查看任何啟動緩慢的應(yīng)用程序啟動偵聽器或 @Context 范圍 bean。

一些網(wǎng)絡(luò)問題也可能導(dǎo)致啟動緩慢。例如,在 Mac 上,錯誤配置 /etc/hosts 文件可能會導(dǎo)致問題。請參閱以下 stackoverflow 答案。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號