1

情况

我有一个模块化的 Spring Boot 应用程序,它目前由 组成applicationProject,其中包括第一个子模块moduleA作为依赖项(maven)。

这允许它applicationProject是一个单独的 java 类,它初始化 Spring 应用程序,其中实际功能由定义为依赖项的模块提供。

我的所有模块以及这些模块applicationProject都位于 base package 下方com.mycompany.myproduct

我的applicationProjectjava 类看起来很简单:

@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注释中声明了基本包时,为什么我需要再次声明基本包?

或者这甚至是独立春季项目的缺陷?

4

0 回答 0