加了@Component注解的类 Spring 为何无法创建对应Bean?
问题原因
@ComponentScan使用错误:你当前给@ComponentScan传的是类的全限定名字符串,默认该参数是扫描的包路径,Spring会把你填的com.ll.rabbittutorial.messagingconsumer.RoomCleanerProcessor当成包名去扫描,自然找不到对应类,导致带@Component注解的RoomCleanerProcessor没有被注册成Bean。@Value语法错误:启动类中@Value("$amqp.queue.name}")缺少左花括号,后续会触发配置注入失败。
修复方案
- 修正组件扫描配置,二选一即可:
- 方案1(推荐):直接删除
@ComponentScan注解。@SpringBootApplication默认会扫描启动类所在包及其子包下的所有组件注解,你的RoomCleanerProcessor和启动类在同一个包下,默认规则就能覆盖,不需要额外配置扫描。 - 方案2:如果需要手动指定扫描范围,要么修改为包路径:
要么用@ComponentScan("com.ll.rabbittutorial.messagingconsumer")basePackageClasses指定类作为扫描锚点:@ComponentScan(basePackageClasses = RoomCleanerProcessor.class)
- 方案1(推荐):直接删除
- 修正
@Value的语法错误:// 改前 @Value("$amqp.queue.name}") // 改后 @Value("${amqp.queue.name}")
内容的提问来源于stack exchange,提问作者Alihanoa
相关产品推荐
相关产品推荐

