Spring Boot添加@ComponentScan后Controller仍找不到Service Bean问题求助
问题根因与修复步骤
导致Bean找不到的核心原因及修复方式如下:
- Profile未激活问题
你的FriendService实现类上加了@Profile("devel")注解,这意味着只有当前Spring激活的profile为devel时,这个类才会被注册到Spring容器中。如果你的项目没有配置激活develprofile,这个Bean默认不会被加载。
修复方式二选一:
- 在application.properties/yml中添加配置激活devel profile:
spring.profiles.active=devel - 临时去掉
@Profile("devel")注解,先验证功能正常后再按环境需求配置
- 循环依赖问题
你在FriendService类内部又注入了FriendsServiceInterface类型的Bean,而FriendService本身就是这个接口的唯一实现,会触发循环依赖,直接删掉这行注入代码即可:
// 直接删除该行无效注入 @Autowired private FriendsServiceInterface peopleserviceinterface;
- 冗余无效注解清理
- 接口
FriendsServiceInterface上的@Component注解完全无效,Spring不会为接口实例化Bean,直接删掉即可 FriendService上的@Configuration、@Component属于冗余注解,已经加了@Service就可以被Spring扫描识别,这两个注解直接删掉,避免逻辑冲突- 额外建议:当前你把Cors配置的Bean放在Service类中不符合分层规范,建议单独抽一个
CorsConfig配置类,加@Configuration注解后把corsConfigurer这个Bean挪过去,不要和业务Service混写
- 包扫描配置优化
你在Controller、配置类上分散加了多个@ComponentScan,建议统一将扫描配置放到启动类上:如果你的启动类放在com.sample.lombpackdemo根包下,只需要保留启动类的@SpringBootApplication注解即可自动扫描所有子包,不需要额外加零散的@ComponentScan;如果启动类不在根包,修改启动类注解为:
@SpringBootApplication(scanBasePackages = "com.sample.lombpackdemo")
按上述步骤修改后重启项目即可解决Bean找不到的问题。
内容的提问来源于stack exchange,提问作者Pisces1719
相关产品推荐
相关产品推荐

