根据维基百科的这篇文章:Implementing Dependency Inversion Principle可以通过两种方式完成:
下图使用两种方法描述了DIP之前和之后的依赖关系:
在DIP之前: 存储库位于单独的maven模块中,没有接口,服务直接依赖于Repository实现。
方法1: 引入了存储库的接口(抽象)。该接口的实现是另一个模块,服务和存储库实现都直接依赖于接口。
方法2: 在此方法中,接口位于服务的同一个包中。福勒用来描述diagram模式的Separated Interface似乎也是这种方法的一个例子。
我一直在关注 Approach1 ,因为我使用的是Spring的JavaConfig,服务模块必须对基础架构都有依赖关系接口和实现模块。除了我的@Configuration
文件之外,绝对没有任何基础架构具体实现的参考。
我目前正在考虑切换到 Approach2 ,但显然它不会使用JavaConfig,因为我最终会在代码中直接引用对于接口实现模块导致循环依赖,像maven这样的构建工具无法处理。
问题是如何配置spring和maven来实现 Approach2 ?有没有办法我可以问春天 扫描组件 哪些没有作为maven依赖添加?这需要改变我使用maven的方式吗?