Skip to content

Quarkus 常用注解对比 ​

Bean 定义 ​

Quarkus / CDISpring作用
@ApplicationScoped@Component / @Service最常用业务 Bean
@Singleton默认 singleton单实例 Bean
@Produces@Bean手动创建 Bean
@Named@Component("name")给 Bean 命名

Quarkus 更推荐普通业务 Bean 使用 @ApplicationScoped。它和 @Singleton 有一个重要区别:@ApplicationScoped 属于 CDI Normal Scope,会通过 Client Proxy 使用,并支持延迟实例化;@Singleton 是 pseudo-scope,语义更接近直接持有单实例。

Bean 作用域 ​

Quarkus / CDISpring生命周期范围
@ApplicationScopedsingleton应用级
@Singletonsingleton单实例
@RequestScoped@RequestScope一次请求
@SessionScoped@SessionScope一个 Session
@Dependentprototype(近似)跟随被注入对象

容器 / 应用生命周期 ​

QuarkusSpring含义
@Observes StartupEventApplicationReadyEvent / ContextRefreshedEvent应用启动
@Observes ShutdownEventContextClosedEvent应用关闭
@Startupeager singleton 等机制强制 Bean 启动时初始化

依赖注入与 Bean 选择 ​

Quarkus / CDISpring
@Inject@Autowired
@Qualifier@Qualifier
@Named@Qualifier("xxx") / Bean Name
@Alternative类似 @Primary / 条件替代实现
@Priority@Primary / @Order,视场景而定

Bean 创建与销毁 ​

Quarkus / CDISpring
@Produces@Bean
@Disposes@Bean(destroyMethod=...) / DisposableBean
java

@Produces
Client client() {
    return new Client();
}

void close(@Disposes Client client) {
    client.close();
}