Spring Boot跨模块Autowired:如何添加其他模块包至ComponentScan扫描范围
解决方案:跨模块组件扫描配置
嘿,这个场景其实挺常见的,咱们直接说怎么搞定:
你的主启动类在module2(包路径com.company.module2),Spring Boot默认只会扫描当前包及其子包下的组件,所以module1里的myRepository不在默认扫描范围内,必须显式把它的包路径加入扫描列表。
你可以直接在@SpringBootApplication注解里通过scanBasePackages参数指定所有需要扫描的包,把module1的包路径com.company.module1加进去就好,示例代码如下:
@SpringBootApplication(scanBasePackages = {"io.swagger", "com.company.module2", "com.company.module1"}) public class Module2Application { // 你的module2主启动类 @Autowired private MyRepository myRepository; // 现在就能正常注入了 public static void main(String[] args) { SpringApplication.run(Module2Application.class, args); } }
额外提醒:
@SpringBootApplication本身就集成了@ComponentScan的功能,没必要额外单独加@ComponentScan注解,用scanBasePackages统一配置更简洁。- 如果
myRepository是Spring Data系列的仓库(比如JPA仓库),要是发现还是扫不到,记得检查@EnableJpaRepositories的basePackages是否也包含了com.company.module1——不过一般来说,只要仓库接口标了@Repository,上面的scanBasePackages已经能覆盖到啦。
内容的提问来源于stack exchange,提问作者hamou amroun
相关产品推荐
相关产品推荐

