我有一个模块化的Spring Boot应用程序,它目前由applicationProject
组成,它包含第一个子模块moduleA
作为依赖项(maven)。
这允许applicationProject
是一个java类,它初始化Spring应用程序,其中实际功能由定义为依赖项的模块提供。
我的所有模块以及applicationProject
都在基础包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尝试初始化一个bean ServiceA
,它自己依赖于另一个bean RepositoryA
都在moduleA
中定义。
这让我假设Spring确实检测到bean,但是没有正确构建依赖树,导致bean实例化顺序错误。
添加时
@EnableJpaRepositories(basePackages = "com.mycompany.myproduct")
@EntityScan(basePackages = "com.mycompany.myproduct")
初始化MyApp
类,spring正确加载bean并且应用程序成功运行。
对我而言,这似乎是一种解决方法,或者当我已经在@EnableJpaRepositories
注释中声明基础包时,为什么我需要再次为@EntityScan
和SpringBootApplication
声明基础包?< / p>
或者这是否因为独立的春季项目而存在缺陷?