Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 - Fatal编程技术网

Java maven多模块项目中的循环引用。我能做些什么来修复它

Java maven多模块项目中的循环引用。我能做些什么来修复它,java,spring,maven,Java,Spring,Maven,我正在做一项任务,我应该设计一个分为模块的简单电话簿应用程序 PhoneBookAPI:从xsd文件生成的jaxb类,用于存储库、DAO和服务的接口 电话簿服务器:它由存储库、DAO和服务的实现组成。它还具有将xml导入数据库的类 phonebook web:此模块具有存储库、服务等所需的所有配置,还具有数据库配置。它有几个xml文件,用于生成DAO和sql脚本中使用的DBI类,以创建一个简单的表来存储电话簿数据库中的联系人(它只有一个表)。此外,该模块还有一个简单的控制器 电话簿客户端:简单

我正在做一项任务,我应该设计一个分为模块的简单电话簿应用程序

  • PhoneBookAPI:从xsd文件生成的jaxb类,用于存储库、DAO和服务的接口
  • 电话簿服务器:它由存储库、DAO和服务的实现组成。它还具有将xml导入数据库的类
  • phonebook web:此模块具有存储库、服务等所需的所有配置,还具有数据库配置。它有几个xml文件,用于生成DAO和sql脚本中使用的DBI类,以创建一个简单的表来存储电话簿数据库中的联系人(它只有一个表)。此外,该模块还有一个简单的控制器
  • 电话簿客户端:简单的MBeans应用程序
这是目前的情况:

  • PhoneBookAPI模块依赖于phonebook web,因为它需要这些DBI类作为DAO接口
  • 电话簿服务器模块依赖于电话簿api,因为它需要存储库、DAO和服务的接口。由于这些生成的DBI类,它还依赖于电话簿web
  • phonebook web模块依赖于这两个模块,因为配置需要它们

所以,有循环引用。你能帮我解决这个设计问题吗?

答案在你的问题中。问题在于设计。解决方案的关键是为每个模块指定不同的目的,分离关注点并避免相互依赖

您可以探索的其他选项包括

  • 这里的反模式是,您依赖于
    web
    模块。这不太可能是理想的。您应该避免模块依赖于堆栈中较高的单元这是我首先尝试更改的内容:将电话簿web中的共享代码提取到一个共享模块中

  • 制作更小的模块。Maven对此没有问题。
    如果包
    c
    a
    依赖于
    b
    ,java包
    d
    b
    依赖于
    a
    ,那么您可以将包
    c
    d
    提取到一个单独的模块中,
    a
    b
    都依赖于该模块

  • 检查您是否真的需要单独的模块。
    也许在单独的模块中有
    电话簿api
    电话簿服务器
    、和
    电话簿网络
    ,根本不需要。除非您打算在不同的应用程序中重用这些模块,否则最好使用一个
    电话簿网站
    ,其中包含所有当前模块的代码


    • 答案在你的问题中。问题在于设计。解决方案的关键是为每个模块指定不同的目的,分离关注点并避免相互依赖

      您可以探索的其他选项包括

      • 这里的反模式是,您依赖于
        web
        模块。这不太可能是理想的。您应该避免模块依赖于堆栈中较高的单元这是我首先尝试更改的内容:将电话簿web中的共享代码提取到一个共享模块中

      • 制作更小的模块。Maven对此没有问题。
        如果包
        c
        a
        依赖于
        b
        ,java包
        d
        b
        依赖于
        a
        ,那么您可以将包
        c
        d
        提取到一个单独的模块中,
        a
        b
        都依赖于该模块

      • 检查您是否真的需要单独的模块。
        也许在单独的模块中有
        电话簿api
        电话簿服务器
        、和
        电话簿网络
        ,根本不需要。除非您打算在不同的应用程序中重用这些模块,否则最好使用一个
        电话簿网站
        ,其中包含所有当前模块的代码


      如果您打算通过配置appContext.xml文件,我建议您将每个模块中的config:create.xml conf文件分离到绑定的上下文中。否则,您需要检查此项目中的模块化需求。分离构建DBI对象所需的配置是最好的方法,因为这些配置将紧密绑定您的API和Web模块。将此配置作为一个单独的模块,生成必要的文件,并将其作为依赖项添加到API中。。无论如何,Web需要此API模块。。这些配置依赖项将自动用于Web。我需要使用这些模块,因为它们是在任务中预定义的。我是春天的新手。所以,我的问题是,如果我分开配置,在战争中所有的东西都会被收集吗?只有电话簿网站有war包装。另外,我真的不知道如何用生成的DBI类解决这个问题。它们用于电话簿api(DAO接口)和电话簿服务器(DAO impl)。在phonebook服务器中生成它们将不起作用,因为它将再次导致循环引用问题(phonebook服务器需要接口,phonebook api需要DBI类)。但是我可以在phonebook-api中生成这些类。如果您打算通过配置appContext.xml文件,我建议您将每个模块中的config:create.xml conf文件分离到绑定的上下文中。否则,您需要检查此项目中的模块化需求。分离构建DBI对象所需的配置是最好的方法,因为这些配置将紧密绑定您的API和Web模块。将此配置作为一个单独的模块,生成必要的文件,并将其作为依赖项添加到API中。。无论如何,Web需要此API模块。。这些配置依赖项将自动用于Web。我需要使用这些模块,因为它们是在中预定义的