说我有以下组件:
我知道这很容易用Java这样的可变语言来完成。我知道这也可以通过允许接口部分可变来解决,例如描述here。
然而,即使可能,拥有循环依赖也不是一个好习惯。因此,让我们假设所有引用都是构造函数注入和最终引用:
final Consumer
和final Monitor
final Monitor
final Stopper
final Producer
和final Consumer
我找到了诸如this之类的引用,但它们似乎并不适用。
如何解决这种情况和一般情况下的这种情况?换句话说,我最感兴趣的是如何从设计的角度来完成不形成循环。任何提示?
答案 0 :(得分:2)
你是对的,如果所有依赖都是最终的并且通过构造函数注入,这将不起作用。
但我可以问,为什么必须通过构造函数注入它们?在一天结束时使用setters
连接bean是没有错的。
事实上,在Spring中,bean通常先实例化然后注入。所以你可以看看这种方法。
除此之外,您可以看一种不同的方式来模拟您的问题(没有循环依赖)。
例如,由于您已经使用队列在生产者和消费者之间发送消息,为什么不将队列上的消息发送到监视器?塞子也可以向生产者和消费者发送信息。
或者,正如泰勒建议的那样,ESB。
可能有很多其他方法可以设计它,请阅读(例如)Apache Camel Enterprise Integration Patterns以获取某些想法。