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

标签 java spring maven

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

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

现在的情况是这样的:

  • phonebook-api 模块依赖于phonebook-web,因为它需要这些 DBI 类来实现 DAO 接口(interface)
  • phonebook-server 模块依赖于phonebook-api,因为它需要存储库、DAO、服务的接口(interface)。由于这些生成的 DBI 类,它还依赖于电话簿网络。
  • phonebook-web 模块依赖于这两个模块,因为配置需要它们。

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

最佳答案

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

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

  • 这里看起来的反模式是您对 web 模块的依赖。这不太可能是理想的。您应该避免模块依赖于堆栈高层的单元。 这是我首先要尝试更改的:将共享代码从电话簿网络提取到共享模块之一。

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

  • 检查您是否确实需要单独的模块。
    也许毕竟没有必要将 phonebook-apiphonebook-serverphonebook-web 放在单独的模块中。除非您打算在不同的应用程序中重用这些模块,否则最好使用单个 phonebook-web 以及其中包含所有当前模块的代码。

关于java - maven多模块项目中的循环引用。我能做什么来修复它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415917/

相关文章:

java.sql.SQLSyntaxErrorException : Unknown column 'student0_.student_id' in 'field list'

java - 我收到 exception-org.apache.catalina.core.ApplicationDispatcher.invoke 抛出异常 java.lang.IllegalStateException

Spring 数据Redis

eclipse - gwt-maven-plugin 与 Eclipse Indigo

java - 在插件 com.google.appengine :appengine-maven-plugin 中找不到目标 'run'

java - Android OpenCV 提高检测质量

java - MongoDB[Java] : How do I query a stored UUID in byte[ ] format?

java - 如何修复底部按钮上的软键盘重叠?

java - Spring TransactionProxyFactoryBean 仅在从外部类调用方法时才支持事务

java - 越来越严重 : Could not locate SessionFactory in JNDI while getting sessionfactory