【问题标题】:Maven modules dependency an IoC issuesMaven 模块依赖一个 IoC 问题
【发布时间】:2012-11-16 16:46:36
【问题描述】:

我有三个 Maven 模块:

  • Dao(包含 DAO 接口),
  • DaoImpl(包含实现 Dao 的 DAO 类),
  • 服务(包含使用 DaoImpl 对象的服务)。

三个模块之间的依赖关系是这样的:

DaoImpl -> Dao

'->' 表示“依赖于”

我想将 DaoImpl bean 注入到 Service bean 中。问题在于,由于 Service 不依赖于 DaoImpl,它无法访问其类路径。因此,Service 中声明的 DaoImpl bean 不能自动装配到 DaoImpl 的应用程序上下文中声明的 bean。

一种解决方案是让Service依赖于DaoImpl。

Dao

但在这种情况下,为 DAO 提供接口没有任何意义。模块 Dao 将不再需要,DaoImpl 将被公开。

你对这个话题有什么争论吗?

最好的问候。

【问题讨论】:

    标签: spring maven inversion-of-control


    【解决方案1】:

    恕我直言,您应该引入第四个模块,它依赖于 dao、(之一)daoimpl 和服务。

    这是一种“应用程序部署”模块 - 通常是 WAR 或类似的东西。

    • 应用->服务->道
    • 应用程序 -> DaoImpl -> Dao

    Application 模块的作用主要是准备完整的类路径。

    【讨论】:

    • 好的。我知道了。将 DaoImpl bean 提供给 Service 模块的将是该模块,不是吗?
    • 是的,应用程序应该将所有组件连接在一起 - 无论是 java 代码还是 spring 或其他任何东西
    【解决方案2】:

    也可以解决

    Service
      |_DaoIface
      |_DaoImpl
    

    这里的 spring 可以从服务中加载,因此 IFace 和 Impl 都可见。

    由于Impl对服务是直接可见的,不代表不需要DaoIface。这是您的设计决定。如果 DAOImpls 实现将在运行时发生变化,或者如果您想要向其公开 DAO 层的任何其他组件,那么 iface 将很方便。

    【讨论】:

    • 好的,谢谢您的回答。由于我将有一个 web 模块,我认为它将是管理布线的战争。
    猜你喜欢
    • 2021-04-06
    • 1970-01-01
    • 2012-11-29
    • 2010-10-22
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2015-06-23
    • 2023-04-07
    相关资源
    最近更新 更多