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

Kotlin集成Micronaut修改@Named指定Bean名后报无对应Bean错误

问题排查结果

报错的核心原因是仅修改了依赖注入点的@Named限定名,未同步修改Bean注册到容器时声明的名称,容器中不存在名为test-index-new的BigramIndexManagerService类型Bean,因此抛出匹配失败错误。你之前配置的注解处理器、yml参数都没有问题,不需要调整。

修复方案

  • 定位BigramIndexManagerService的Bean定义位置
    你贴出的BigramIndexManagerService类本身没有加任何Bean声明注解,且原名称test-index可以正常注入,说明这个Bean是通过@Factory标注的工厂类生产的,找到类似如下的生产代码:
    @Factory
    class AppBeanFactory {
        @Bean
        @Named("test-index") // 这是未同步修改的Bean名称配置
        fun provideBigramIndexService(): BigramIndexManagerService {
            return BigramIndexManagerService()
        }
    }
    
    将工厂方法上@Named注解的值从test-index修改为test-index-new,和注入点的名称保持完全一致即可。
  • 如果你是直接在服务类上声明Bean,直接给类加上对应名称的注解即可:
    @Singleton
    @Named("test-index-new")
    class BigramIndexManagerService {
        // 业务服务逻辑
    }
    
  • 改完配置后如果还是报错,执行./gradlew clean build清空历史编译缓存,重新触发Micronaut注解处理生成Bean定义即可。

注意:Micronaut对@Named限定符是严格字符串匹配,注入点的名称必须和Bean注册时声明的名称完全一致,仅修改单侧名称必然会触发找不到Bean的错误。排查时可以按提示开启io.micronaut.context.condition的trace日志,能直接看到所有已注册Bean的名称和加载状态。


内容的提问来源于stack exchange,提问作者Mohamed Niyaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:27:45