Quarkus 的依赖注入基于 ArC,也就是它的 CDI 实现。
一个最常见的服务类:
package org.acme;
import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class GreetingService {
public String message(String name) {
return "hello " + name;
}
}然后在资源类里注入:
@Inject
GreetingService greetingService;从心智上看,这像骑兵编制系统:
- 谁是常驻部队
- 谁在请求中使用
- 谁能被统一调度
Quarkus 并不是拒绝 DI,而是把 DI 做得更贴合自身的构建期优化路线。
也正因如此,官方 CDI 参考里也明确提到:
Quarkus 做了很多 build-time 优化,因此并不是原样支持传统 CDI Portable Extensions。
这句话其实很关键。
它说明 Quarkus 的哲学是:
为运行时轻量化,可以对传统 Java 运行时习惯做结构性取舍。