You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Quarkus扩展中注册@Interceptor拦截器

Quarkus扩展注册CDI拦截器的正确方案

你不需要使用InterceptorResolverBuildItem,通过AdditionalBeanBuildItem注册拦截器和对应的绑定注解即可完成配置。

步骤1:确认runtime模块代码位置

你的@Log绑定注解和LoggingInterceptor类需要放在扩展的runtime模块中,保持现有代码逻辑不变,注意补全日志调用的方法名即可,也可按需添加优先级配置:

@Log
@Interceptor
@Priority(1000) // 可选配置,数值越小拦截器执行优先级越高
public class LoggingInterceptor {
    @AroundInvoke
    Object around(InvocationContext context) throws Throwable {
       Method method = context.getMethod();
       Logger logger = LoggerFactory.getLogger(method.getDeclaringClass());
       // 原代码缺少日志级别方法,这里补全为info,可根据需求调整为debug/error等
       logger.info("Entering {}.{}",
                            method.getDeclaringClass().getSimpleName(),
                            method.getName());
       return context.proceed();
    }
}

步骤2:在deployment模块添加注册逻辑

在扩展的deployment模块的处理器类中,添加如下@BuildStep方法:

import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.deployment.annotations.BuildStep;

public class LoggingExtensionProcessor {

    @BuildStep
    AdditionalBeanBuildItem registerLoggingInterceptor() {
        return AdditionalBeanBuildItem.builder()
                // 注册拦截器绑定注解
                .addBeanClass(Log.class)
                // 注册拦截器实现类
                .addBeanClass(LoggingInterceptor.class)
                // 标记为不可移除,避免Quarkus Bean裁剪阶段删除拦截器
                .setUnremovable()
                .build();
    }
}

验证方式

其他项目引入你的扩展后,直接在类或方法上添加@Log注解即可触发拦截逻辑,无需额外配置。

注意事项

  • 不需要额外提供beans.xml配置,Quarkus Arc容器会自动识别注册的拦截器类的@Interceptor注解完成绑定
  • 优先级常量可参考javax.interceptor.Priority(或Jakarta EE对应的jakarta.interceptor.Priority)类的内置定义。

内容的提问来源于stack exchange,提问作者Ronald R. DiFrango

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:36:05