如何解决"cyclic loading of class path resource"?

How to resolve "cyclic loading of class path resource"?

我有两个独立的项目。一个是 maven,spring webservices(假设这是项目 A),另一个是 maven 批处理项目(我们称之为 B)。 我正在尝试将 B 的 class(比方说 class "batch.java")注入到 A 的 class(我们称之为 "api.java")中。 一个主要的问题陈述是 B 依赖于 A(依赖于 A 的不同 class,而不是依赖于 api.java)。我相信这会导致启动时出现循环加载错误。

我会把我的代码贴在这里,我请求提供一个解决方案: file:B.xml

<import resource="classpath:A.xml" />
    <bean id="batch" class="XXX">
    <!-- lookup methods from project A -->
    </bean>

文件:A.xml

 <import resource="classpath*:B.xml"/>
        <bean id="api" scope="prototype" lazy-init="true">
        <property name="batch" ref="batch" />
    </bean>

代码编译正常,但是当我尝试启动我的 wsdl 时,出现以下错误: org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:无法从 URL 位置 [class 路径:B.xml] 导入 bean 定义 违规资源:class路径资源[A.xml];嵌套异常是 org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:无法从 URL 位置导入 bean 定义 [classpath:A.xml] 违规资源:class路径资源[B.xml];嵌套异常是 org.springframework.beans.factory.BeanDefinitionStoreException:检测到循环加载 class 路径资源 [A.xml] - 检查您的导入定义! org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)

不幸的是你需要打破循环依赖。

将所有常用的 bean 定义放入单独的上下文中,并在您的子上下文中引用此上下文。

那么你应该至少得到 3 context.xml - 例如:

  • common-context.xml(包含在所有子上下文中使用的所有 bean 定义)
  • a-context.xml(包括common-context.xml
  • b-context.xml(包括common-context.xml