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

Quarkus扩展开发中使用SyntheticBeanBuildItem创建Bean时实例化出现NullPointerException(NPE)问题求助

解决Quarkus SyntheticBeanBuildItem导致的NullPointerException问题

这个问题我之前帮别人排查过类似的,根源出在你的ExampleCreator类的访问权限配置上,具体来说:

你的ExampleCreator是private静态内部类,Quarkus在生成合成Bean的字节码时,需要通过反射实例化这个Creator类,但私有类的构造器无法被Quarkus的Bean生成机制访问,导致Creator实例创建失败,最终在尝试调用create方法时抛出NullPointerException。

解决方案

你可以通过以下两种方式修复这个问题:

方式1:调整Creator类的访问权限

将ExampleCreator修改为public静态内部类,或者把它提取成独立的public类,确保Quarkus可以正常加载并实例化它:

public static class ExampleCreator implements BeanCreator<ExampleBean> {
    @Override
    public ExampleBean create(CreationalContext<ExampleBean> creationalContext, Map<String, Object> map) {
        return new ExampleBean("X");
    }
}

方式2:使用Lambda表达式简化Creator实现

更简洁的方式是直接用Lambda表达式替代单独的Creator类,这样可以完全避免类访问权限的问题:

@BuildStep
SyntheticBeanBuildItem syntheticExample(BeanArchiveIndexBuildItem beanArchiveIndex) {
    return SyntheticBeanBuildItem.configure(ExampleBean.class)
            .scope(Singleton.class)
            .creator((creationalContext, params) -> new ExampleBean("X"))
            .done();
}

验证步骤

修改后重新编译并启动你的Quarkus应用,访问注入了ExampleBean的JAX-RS端点,此时Bean应该能正常实例化,不会再抛出NPE了。

内容的提问来源于stack exchange,提问作者Rudy De Busscher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:07:29