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

时间:2019-09-02 11:09:10

标签: java spring maven dependencies circular-dependency

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

项目:projectA
设有课程:ProjectAClass
此项目的pom.xml具有依赖项:

<dependency>
    <groupId>org.projectA</groupId>
    <artifactId>projectB</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

项目:projectB
设有课程:ProjectBClass

现在,我想使用ProjectAClass类中提供的函数,但是由于我无法在projectA的pom.xml中添加projectB项目的依赖项(因为它将导致循环依赖),我尝试通过以下方式使用依赖注入:

我这样创建了一个界面(在projectA项目中):

public interface ProjectAClassInterface {
    String funcToUse() throws Exception;
}

使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'的依赖关系”时,出现以下消息: Adding dependency on module 'projectC' will introduce circular dependency between modules 'projectA' and 'projectB'. Add dependency anyway?

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

1 个答案:

答案 0 :(得分:1)

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