我有一个包含~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
应该怎么做的任何建议?
答案 0 :(得分:0)
正如@unigeek所提到的,在这种情况下,接口是你的朋友。在构建maven项目的上下文中,这意味着将接口分离为单独的API maven模块。
很快Corning
会意识到它还会向GorrilaGlass
提供Samsung
,而不只是Apple
。所以现在它不仅要在getCurrentMarketOrders()
上调用AppleWatch
,还要调用Gear2
。此时解决方案变得更加清晰:引入具有Marketable
和Apple
所依赖的Samsung
接口的API模块,允许AppleWatch
和Gear2
实现Marketable
。然后,Corning
只依赖于这个新的API模块,而不依赖于Apple
或Samsung
,而后者都为这个接口提供了自己的实现。