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

Quarkus项目@ConfigProperty注入String遇UnsatisfiedResolutionException报错

解决Quarkus中@ConfigProperty注入String类型时的UnsatisfiedResolutionException错误

问题根源

报错信息明确指向ConfigWebScraperBuilder()构造函数的webScraperClassName参数无法解析,核心原因:

  • 被@ApplicationScoped注解的类定义了带参数的构造函数时,CDI容器会优先尝试通过该构造函数创建Bean实例,而非字段注入。
  • 构造函数中的String参数未添加任何注入注解(如@ConfigProperty),CDI找不到对应的java.lang.String类型默认Bean,因此抛出UnsatisfiedResolutionException。

解决方案

有两种可行的修复方式:

方案1:添加无参构造函数

让CDI容器通过无参构造函数创建实例,保留字段注入逻辑:

@ApplicationScoped
public class ConfigWebScraperBuilder {
    @ConfigProperty(name = "bot.webscraper.className")
    String webScraperClassName;

    // 添加无参构造函数,供CDI容器实例化使用
    public ConfigWebScraperBuilder() {}

    public ConfigWebScraperBuilder(String webScraperClassName) {
        this.webScraperClassName = webScraperClassName;
    }

    public WebScraper buildWebScraperFromConfig() throws Exception {
        Class<?> clazz = Class.forName(webScraperClassName);
        Constructor<?> constructor = clazz.getConstructor(ParserAdapter.class);
        return (WebScraper) constructor.newInstance(new ParserAdapter());
    }
}

方案2:构造函数参数直接注入配置(推荐)

符合CDI构造注入规范,避免字段注入的潜在问题:

@ApplicationScoped
public class ConfigWebScraperBuilder {
    private final String webScraperClassName;

    // 在构造函数参数上添加@ConfigProperty注解,直接注入配置值
    public ConfigWebScraperBuilder(@ConfigProperty(name = "bot.webscraper.className") String webScraperClassName) {
        this.webScraperClassName = webScraperClassName;
    }

    public WebScraper buildWebScraperFromConfig() throws Exception {
        Class<?> clazz = Class.forName(webScraperClassName);
        Constructor<?> constructor = clazz.getConstructor(ParserAdapter.class);
        return (WebScraper) constructor.newInstance(new ParserAdapter());
    }
}

补充说明

其他位置的@ConfigProperty注入正常,是因为对应类要么使用无参构造函数,要么构造函数参数已正确配置注入注解,CDI容器能正常解析依赖。

内容的提问来源于stack exchange,提问作者Furious Gamer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:05:28