情况
我有一个模块化的 Spring Boot 应用程序,它目前由 组成applicationProject
,其中包括第一个子模块moduleA
作为依赖项(maven)。
这允许它applicationProject
是一个单独的 java 类,它初始化 Spring 应用程序,其中实际功能由定义为依赖项的模块提供。
我的所有模块以及这些模块applicationProject
都位于 base package 下方com.mycompany.myproduct
。
我的applicationProject
java 类看起来很简单:
@SpringBootApplication(scanBasePackages ="com.mycompany.myproduct")
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
在我的moduleA
项目中,我不使用@ComponentScan
它的任何注释或扩展。
问题
当我以这种方式启动我的应用程序时,我得到一个UnsatisfiedDependencyException
,而 Spring 尝试初始化一个ServiceA
它自己依赖于另一个 bean的 bean,这RepositoryA
两个 bean 都在moduleA
.
这让我假设 Spring 确实检测到了 bean,但没有正确构建依赖关系树,从而导致错误的 bean 实例化顺序。
添加时
@EnableJpaRepositories(basePackages = "com.mycompany.myproduct")
@EntityScan(basePackages = "com.mycompany.myproduct")
对于初始化MyApp
类,spring 正确加载 bean 并且应用程序成功运行。
@EnableJpaRepositories
对我来说,这似乎是一种解决方法,或者@EntityScan
当我已经在SpringBootApplication
注释中声明了基本包时,为什么我需要再次声明基本包?
或者这甚至是独立春季项目的缺陷?