2

我有三个 Maven 模块:

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

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

DaoImpl -> Dao <- 服务

'->' 表示'取决于'

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

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

Dao <- DaoImpl <- 服务

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

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

最好的祝福。

4

2 回答 2

1

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

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

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

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

于 2012-11-16T16:56:00.007 回答
0

也可以通过以下方式解决

Service
  |_DaoIface
  |_DaoImpl

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

由于 Impl 对服务是直接可见的,并不意味着 DaoIface 没有必要。这是您的设计决定。如果 DAOImpls 实现将在运行时发生更改,或者如果您想要向其公开 DAO 层的任何其他组件,那么 iface 将很方便。

于 2012-11-16T17:23:40.890 回答