Spring Boot在其依赖bean之前加载组件

时间:2019-01-30 12:56:54

标签: java spring spring-boot javabeans autowired

在使用Spring的项目中,我的行为很奇怪。我有这个结构:

Main-Spring-Project  
  |_Depends on Library A  
     |_Depends on Library B  

现在... A中的组件中有一个@Autowired,它会注入B中的组件。 当我在开发环境中打开所有3个项目并启动主项目时,一切都很正常。但是,如果我删除项目A并离开项目B,则开始说:

Field factory in [class in A] required a bean of type '[class in B]' that could not be found.

所以...我怀疑它是在B之前加载A。 我不明白的是,如果我同时打开两个项目,为什么它会完美工作;为什么当我关闭A(主项目正在使用其JAR)时,它崩溃?

顺便说一句...如果我删除A和B,一切都会恢复正常。

1 个答案:

答案 0 :(得分:0)

在上下文加载期间,没有Spring不会出错。
这种行为是有道理的:该类仅在运行时不可用。

由于库B是您当前的开发代码的一部分,因此您在这里使用库B的快照/当前开发源代码/编译的类。
这意味着在应用程序运行期间所需的库B依赖项/类不依赖于Maven来检索它们,而是依赖于IDE可以访问的内容:库A和B项目。

为避免这种情况,您应该installmvn clean install)在本地Maven / Gradle存储库中的B依赖性,但是如果您需要重复20天,则可能不切实际B源代码一天20天更改一次。

请注意,如果您不使用IDE,则每次修改时都必须安装依赖项。所以最后,它一点也不差。不是吗

相关问题