13

我遇到了一个奇怪的问题。我的印象是,如果指定了顶级包进行扫描,组件扫描会递归地扫描子包。

我的存储库和实体是项目的 Maven 依赖项。它们位于包名 com.foo.bar.xyz 下,我的应用程序配置位于包 com.foo.bar 下。当我写@ComponentScan(basePackages = "com.foo.bar")时,@EnableJpaRepositories它会给出一个错误,即找不到存储库 bean。

但是,当我指定一个顶级存储库包时@EnableJpaRepositories(basePackages = com.foo.bar.xyz),连同上面的组件扫描,它检测到存储库就好了。

现在发生这种情况仅仅是因为存储库和实体被注入为 Maven 依赖项吗?那么组件扫描的递归部分,是扫描子包还是子目录呢?

4

1 回答 1

12

现在发生这种情况仅仅是因为存储库和实体被注入为 Maven 依赖项吗?

  • 不它不是

那么组件扫描的递归部分,是扫描子包还是子目录呢?

  • 是的,组件扫描确实在子包中递归搜索

在这里详细说明@ComponentScan旨在搜索所有具有@Component或其子类型@Controller的类,例如,通过使用注释注释 PersistenceContext 类来启用 Spring Data JPA,@EnableJpaRepositories并配置在 Spring Data JPA 为存储库接口创建实现时扫描的基本包。因此,需要为两者声明基本包@ComponentScan信息@EnableJpaRepositories

于 2016-06-20T06:54:12.310 回答