使用Maven和Spring实现依赖倒置原则

时间:2015-11-02 06:35:51

标签: spring maven dependency-injection solid-principles dependency-inversion

根据维基百科的这篇文章:Implementing Dependency Inversion Principle可以通过两种方式完成:

  • 在高级别和低级别组件所依赖的单独包中抽象低级别组件。
  • 将低级组件的抽象驻留在高级组件的同一个包中。

下图使用两种方法描述了DIP之前和之后的依赖关系:

在DIP之前: 存储库位于单独的maven模块中,没有接口,服务直接依赖于Repository实现。 Dependencies before DIP

方法1: 引入了存储库的接口(抽象)。该接口的实现是另一个模块,服务和存储库实现都直接依赖于接口。 DIP Implementation Approach 1

方法2: 在此方法中,接口位于服务的同一个包中。福勒用来描述diagram模式的Separated Interface似乎也是这种方法的一个例子。 DIP Implementation Approach 1

我一直在关注 Approach1 ,因为我使用的是Spring的JavaConfig,服务模块必须对基础架构都有依赖关系接口和实现模块。除了我的@Configuration文件之外,绝对没有任何基础架构具体实现的参考。

我目前正在考虑切换到 Approach2 ,但显然它不会使用JavaConfig,因为我最终会在代码中直接引用对于接口实现模块导致循环依赖,像maven这样的构建工具无法处理。

问题是如何配置spring和maven来实现 Approach2 ?有没有办法我可以问春天 扫描组件 哪些没有作为maven依赖添加?这需要改变我使用maven的方式吗?

0 个答案:

没有答案