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

Spring项目使用component-scan标签时出现NoSuchBeanDefinitionException求助

问题分析与解决

你遇到的NoSuchBeanDefinitionException核心原因是Spring的组件扫描(component-scan)只会识别带有特定注解的类,你的MoneyService没有添加这类注解,所以没被自动注册成Bean。

具体解决步骤:

  1. 给MoneyService添加服务类注解
    Spring的component-scan需要类上标注@Component或其衍生注解(@Service、@Repository、@Controller)才会将类纳入容器管理。因为MoneyService是业务服务类,用@Service更符合语义:

    import org.springframework.stereotype.Service;
    
    @Service
    public class MoneyService {
        public void perform(Operation operation) {
            …
        }
    }
    
  2. 确认组件扫描路径有效性
    你的XML配置里base-package="com.example"是正确的,因为MoneyService在com.example.services子包下,component-scan会递归扫描所有子包,这部分不用修改。

  3. Bean名称匹配验证
    如果你没有在@Service里指定自定义名称(比如@Service("myMoneyService")),Spring默认会把类名首字母小写作为Bean名称(MoneyService → moneyService),你代码里getBean("moneyService")的写法是正确的,只要类被扫描到就能正常获取。

补充说明

你直接加<bean>标签能正常运行,是因为这种方式是显式注册Bean,不需要依赖注解,Spring会直接根据标签配置创建实例。而component-scan是基于注解的自动扫描机制,必须配合组件注解才能生效,这就是两者的区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:22:50