Spring多模块扫描包冲突:添加@ComponentScan后Rest模块Bean无法加载
问题原因
当你在@SpringBootApplication上显式添加@ComponentScan并指定basePackages时,会覆盖@SpringBootApplication自带的默认扫描规则。@SpringBootApplication默认会扫描自身所在包(dev.company.rest)及其所有子包,但手动指定basePackages后,Spring只会扫描你指定的dev.company.persistence包,导致rest-module自身的@Controller等Bean无法被加载。
解决方案
有三种可行的解决方式,按需选择:
方式一:同时指定两个模块的包路径
把rest-module自身的包也加入@ComponentScan的扫描范围:
@ComponentScan(basePackages = {"dev.company.persistence", "dev.company.rest"}) @SpringBootApplication
方式二:使用类型安全的basePackageClasses
通过指定类来确定扫描范围,避免硬编码包名,更易维护:
// 假设RestApplication是你的SpringBoot启动类,SomePersistenceClass是persistence-module里的任意类 @ComponentScan(basePackageClasses = {RestApplication.class, SomePersistenceClass.class}) @SpringBootApplication
方式三:改用@EnableJpaRepositories扫描Repository
既然你的目的是加载persistence-module里的Repository Bean,没必要用@ComponentScan全局扫描,专门用@EnableJpaRepositories指定Repository的包即可,这样不会影响@SpringBootApplication的默认扫描:
@EnableJpaRepositories(basePackages = "dev.company.persistence") @SpringBootApplication
内容的提问来源于stack exchange,提问作者Lucho82
相关产品推荐
相关产品推荐

