在上一篇我們看到 Quarkus 應用啟動非常快速,而且可以編譯成 Native。所以非常適合佈署在雲服務的環境。開發的過程中其實也可以注入 Bean, 跟 Spring Boot 用類似的 Annotation, library set,可是編出來卻有很大的差別。
過往的 JVM Application,在 Build time 時就是把 java 打包成 class,等到執行時再來作讀 config, 動態的找 dependency (DI), 建立 bean 與 bean 的相依樹,最後才是執行可以接受 Request
所以 Quarkus 把這些重覆步驟都拉到 compile time, 編譯時作靜態的 DI 等等,大大減少了 startup time overhead.這種作法稱作 AOT (ahead-of-time)
Quarkus 底層進行優化,但對 Java 開發者來說,開發習慣是差不多的,因為他整合了常見的函式庫而且都有經過 Native 的測試,對有經驗的 Java/Kotlin 開發者是很好上手。
因為是在編譯期就作了 binding, 所以 Quarkus 不支援 Dynamic classloading, 以及在 Reflection 時要手動指定。這是因為這些動作都是比較花資源與時間的,在開發時也要儘量避免。
Spring Boot 因應 cloud native 也開始往 native build 方面走,但會有很多過去的包袱,所以目前是 v0.12.1 。而 Quarkus 是一開始就瞄準了 cloud native 與 binary ,所以在這方面會順利很多。