Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用依赖注入解决循环依赖时,如何解决maven问题?_Java_Spring_Maven_Dependencies_Circular Dependency - Fatal编程技术网

Java 使用依赖注入解决循环依赖时,如何解决maven问题?

Java 使用依赖注入解决循环依赖时,如何解决maven问题?,java,spring,maven,dependencies,circular-dependency,Java,Spring,Maven,Dependencies,Circular Dependency,我在两个不同的项目中有两个班,如下所示: 项目:projectA 有一个类:ProjectAClass 此项目的pom.xml有一个依赖项: <dependency> <groupId>org.projectA</groupId> <artifactId>projectB</artifactId> <version>1.0-SNAPSHOT</version> </dependenc

我在两个不同的项目中有两个班,如下所示:

项目:
projectA

有一个类:
ProjectAClass

此项目的pom.xml有一个依赖项:

<dependency>
    <groupId>org.projectA</groupId>
    <artifactId>projectB</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
使
ProjectAClass
类实现接口:

public class ProjectAClass implements ProjectAClassInterface{
    public String funcToUse() throws Exception {
        ...
    }
}
最后,尝试在
ProjectBClass
中使用此接口:

public class ProjectBClass {
    private ProjectAClassInterface projectAClassInterface;

    public ProjectAClassInterface getProjectAClassInterface() {
        return projectAClassInterface;
    }

    public void setProjectAClassInterface(ProjectAClassInterface projectAClassInterface) {
        this.projectAClassInterface = projectAClassInterface;
    }
}
ProjectAClassInterface
在IntelliJ中显示为红色,当我单击Alt+Enter并选择选项“添加模块依赖项”projectC时,我收到以下消息:
添加对模块“projectC”的依赖将在模块“projectA”和“projectB”之间引入循环依赖。是否仍要添加依赖项?


尽管遵循接口方法,我仍然无法消除循环依赖。我哪里出错了?

您需要创建第三个maven模块并将接口移动到该模块。然后让您的模块projectA和projectB依赖于新创建的模块。这将避免循环依赖。

当然它会显示为红色。它要么依赖于它,从而访问代码,要么不依赖。projectA依赖projectB有什么具体原因吗?是的,projectA使用projectB中的其他一些API,或者只是将接口移动到projectB
public class ProjectBClass {
    private ProjectAClassInterface projectAClassInterface;

    public ProjectAClassInterface getProjectAClassInterface() {
        return projectAClassInterface;
    }

    public void setProjectAClassInterface(ProjectAClassInterface projectAClassInterface) {
        this.projectAClassInterface = projectAClassInterface;
    }
}