使用@ComponentScan无法同时扫描指定包与自身包的问题求助
Spring Boot Bean扫描异常问题
项目结构说明:
- 启动类所在模块:包路径为
vn.com.fecredit.los.documentservice.api,启动类为ApiApplication - 需要扫描的依赖模块:位于
libs/infra目录,对应包路径为vn.com.fecredit.los.infra
启动应用时遇到以下Bean扫描问题:
当
ApiApplication中使用默认的@SpringBootApplication注解(未指定扫描路径参数)时,无法扫描到libs/infra文件夹中的Bean。
我尝试修改扫描路径后出现新问题:
当
ApiApplication中指定扫描路径为vn.com.fecredit.los.infra(即@SpringBootApplication(scanBasePackages = "vn.com.fecredit.los.infra"))时,能扫描到infra中的Bean,但无法扫描到api自身服务中的Bean。
解决办法
方法1:同时指定多个扫描包
在@SpringBootApplication注解中同时声明api模块和infra模块的根包路径,让Spring同时扫描两个目录下的Bean:
@SpringBootApplication(scanBasePackages = { "vn.com.fecredit.los.documentservice.api", "vn.com.fecredit.los.infra" }) public class ApiApplication { public static void main(String[] args) { SpringApplication.run(ApiApplication.class, args); } }
方法2:调整启动类位置
将ApiApplication移动到vn.com.fecredit.los这个共同父包下,Spring默认的扫描规则(当前包及所有子包)会自动覆盖api和infra两个模块,无需手动指定扫描路径。
方法3:结合@ComponentScan注解
如果不想修改@SpringBootApplication的参数,可以单独添加@ComponentScan注解指定多个扫描路径:
@SpringBootApplication @ComponentScan(basePackages = { "vn.com.fecredit.los.documentservice.api", "vn.com.fecredit.los.infra" }) public class ApiApplication { public static void main(String[] args) { SpringApplication.run(ApiApplication.class, args); } }
内容的提问来源于stack exchange,提问作者hungtv
相关产品推荐
相关产品推荐

