使用构造型注解创建Bean时Spring Context不识别,抛出NoSuchBeanDefinitionException
问题原因排查及解决方案
核心错误:组件扫描路径配置错误
你当前@ComponentScan指定的扫描路径是basePackages = "parrot",但Parrot类的完整包路径是main.parrot,Spring会默认从类路径根目录寻找名为parrot的包进行扫描,找不到匹配的包自然无法识别Parrot类上的@Component注解,也就不会创建对应的Bean。
可用修复方案(任选其一即可)
- 方案1:修改
@ComponentScan的扫描路径为全量包名
把配置类的@ComponentScan改为:@ComponentScan(basePackages = "main.parrot") - 方案2:使用基础包类的方式指定扫描路径(更安全,避免拼写错误)
这种方式会自动扫描@ComponentScan(basePackageClasses = Parrot.class)Parrot类所在的包及其子包,修改包名时IDE也会自动同步修改。 - 方案3:如果配置类和要扫描的组件属于同根父包,可以直接省略basePackages配置
你当前配置类在main包下,直接写@ComponentScan不加参数的话,默认会扫描main包及其所有子包,也能扫到main.parrot下的Parrot类。
其他需要额外排查的常见场景
如果修改路径后还是报错,可以逐一核对以下点:
- 确认
@Component注解导入的是Spring的正确包:org.springframework.stereotype.Component,不要导错其他框架的同名注解 - 确认
Parrot类所在的模块已经被正确打包/编译到类路径中,不存在编译遗漏的情况 - 确认配置类上的
@Configuration注解没有导错包,正确包路径是org.springframework.context.annotation.Configuration
内容的提问来源于stack exchange,提问作者Federico Favaro
相关产品推荐
相关产品推荐

