我有一个Spring项目,它包含大约50个组件。不幸的是,其中一个类在Maven中引发了循环依赖性问题。故事是这样的:
我在Spring项目中添加了一个新组件。现在我们称之为Apple
。它有一个名为AppleWatch
的@Bean
。其中一个实现是Apple
依赖于另一个组件:Foxconn
,因此AppleWatch
可以调用Bean中名为CheapLabor
的方法。
同时,CheapLabor
依赖于另一个组件:Corning
。它需要GorillaGlass
才能加班。
事情一直很好,直到Corning
意识到它想根据苹果的市场需求生产同样数量的眼镜来省钱。因此,它尝试在AppleWatch
中调用一个方法getCurrentMarketOrders()
。为此,我将beanAppleWatch
自动连接到类GorillaGlass.java
中。然后
轰!循环依赖错误!
那么,关于我应该为Apple
和/或Corning
做些什么,有什么建议吗?
正如@unigeek所提到的,在这种情况下,接口是您的朋友。在构建maven项目的上下文中,这意味着将接口分离为单独的API maven模块。
很快,Corning
将意识到它还向Samsung
提供GorrilaGlass
,而不仅仅是Apple
。因此,现在它不仅需要在AppleWatch
上调用getCurrentMarketOrders()
,而且还需要调用Gear2
。在这一点上,解决方案变得更加清晰:引入一个具有Marketable
接口的API模块,Apple
和Samsung
都依赖该接口,允许AppleWatch
和Gear2
实现Marketable
。然后Corning
只依赖于这个新的API模块,而不直接依赖于Apple
或Samsung
,而后者都为这个接口提供自己的实现。