Skip to content

Quarkus 核心概念 ​

官方资料:Quarkus Guides;源码:quarkusio/quarkus。

简介 ​

Quarkus 不是“另一个 Spring Boot”。它的核心区别在于尽可能把运行时工作提前到 build time。

与 Spring Boot 的概念对比 ​

概念对比 ​

QuarkusSpring 中可以类比的概念核心区别
CDISpring DI 编程模型CDI 是 Jakarta 标准
ArCBeanFactory / ApplicationContextArC 大量工作在 Build Time
JandexASM / MetadataReader / ReflectionJandex 是预先建立的类型索引
BeanInfoBeanDefinitionArC 内部 Bean 模型
BuildStepSpring Framework 启动阶段 Processor 的工作Quarkus 在 Build 阶段执行
BuildItemProcessor 间的数据/状态Quarkus 明确建立 DAG
AugmentationSpring Boot 启动时自动配置、扫描等过程Quarkus 把大量工作提前到 Build
Recorder无完全等价概念Build Time 记录 Runtime 初始化逻辑
GizmoASM / ByteBuddy 等Quarkus 字节码生成工具
Synthetic Bean程序化 BeanDefinitionBuild Time 注册
deployment moduleSpring Framework 内部 Processor 类似职责不进入最终普通 Runtime
runtime moduleSpring 应用运行时组件真正参与应用运行
mermaid
flowchart TD
    CDI["CDI<br/>Contexts and Dependency Injection<br/>定义依赖注入规范"]

    subgraph BUILD["Build Time / Augmentation"]
        ARC["ArC<br/>Quarkus CDI 实现"]
        JANDEX["Jandex<br/>Java 类型 / 注解元数据索引"]
        BUILDSTEP["BuildStep<br/>构建期任务"]
        COMBINED["CombinedIndexBuildItem<br/>组合后的 Jandex Index"]
        BEANDISCOVERY["Bean Discovery<br/>发现 CDI Bean"]
        BEANINFO["BeanInfo<br/>Bean 的构建期模型"]
        INJECTION["InjectionPointInfo<br/>注入点信息"]
        BUILDITEM["BuildItem<br/>BuildStep 之间传递数据"]
        RECORDER["Recorder<br/>记录 Runtime 初始化逻辑"]
        GIZMO["Gizmo<br/>生成 Java Bytecode"]
    end

    subgraph RUNTIME["Runtime"]
        CONTAINER["ArcContainer<br/>运行时 CDI 容器"]
        BEAN["Bean Instance<br/>实际 Bean 实例"]
    end

    CDI -->|" 定义规则 "| ARC
    JANDEX --> COMBINED
    COMBINED --> ARC
    BUILDSTEP --> BUILDITEM
    BUILDITEM --> ARC
    ARC --> BEANDISCOVERY
    BEANDISCOVERY --> BEANINFO
    BEANDISCOVERY --> INJECTION
    BEANINFO --> RECORDER
    BEANINFO --> GIZMO
    INJECTION --> GIZMO
    RECORDER -->|" 生成 Runtime 初始化代码 "| CONTAINER
    GIZMO -->|" 生成 Bean / Proxy 等字节码 "| CONTAINER
    CONTAINER --> BEAN