在使用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,一切都会恢复正常。
答案 0 :(得分:0)
在上下文加载期间,没有Spring不会出错。
这种行为是有道理的:该类仅在运行时不可用。
由于库B是您当前的开发代码的一部分,因此您在这里使用库B的快照/当前开发源代码/编译的类。
这意味着在应用程序运行期间所需的库B依赖项/类不依赖于Maven来检索它们,而是依赖于IDE可以访问的内容:库A和B项目。
为避免这种情况,您应该install
(mvn clean install
)在本地Maven / Gradle存储库中的B
依赖性,但是如果您需要重复20天,则可能不切实际B
源代码一天20天更改一次。
请注意,如果您不使用IDE,则每次修改时都必须安装依赖项。所以最后,它一点也不差。不是吗