Spring项目的Maven循环依赖问题

时间:2016-05-18 17:13:42

标签: java spring maven cyclic-dependency

我有一个包含~50个组件的Spring项目。不幸的是,其中一个类在Maven中引起了循环依赖的问题。这是故事:

我在Spring项目中添加了一个新组件。我们暂时将其称为 Apple 。它有@Bean名为 AppleWatch 。其中一个实现是 Apple 在另一个组件上生存(依赖): Foxconn ,因此 AppleWatch < / em>可以在Bean中调用名为 CheapLabor 的方法。

与此同时, CheapLabor 依赖于另一个组件: Corning 。它需要 GorillaGlass 才能加班。

直到 Corning 意识到它希望通过根据Apple的市场需求制作类似数量的眼镜来节省资金时,情况非常好。因此,它尝试在 getCurrentMarketOrders() 中调用方法 AppleWatch 。为此,我将bean AppleWatch 自动装入类 GorillaGlass.java 。然后...

轰!循环依赖错误!

那么,有关 Apple 和/或 Corning 应该怎么做的任何建议?

1 个答案:

答案 0 :(得分:0)

正如@unigeek所提到的,在这种情况下,接口是你的朋友。在构建maven项目的上下文中,这意味着将接口分离为单独的API maven模块。

很快Corning会意识到它还会向GorrilaGlass提供Samsung,而不只是Apple。所以现在它不仅要在getCurrentMarketOrders()上调用AppleWatch,还要调用Gear2。此时解决方案变得更加清晰:引入具有MarketableApple所依赖的Samsung接口的API模块,允许AppleWatchGear2实现Marketable。然后,Corning只依赖于这个新的API模块,而不依赖于AppleSamsung,而后者都为这个接口提供了自己的实现。