2010-04-13 68 views
3

我的任务是完成一些关于如何启动应用程序的重构工作。基本上我们有一些控制台应用程序,这些应用程序依赖于GUI应用程序启动代码,从而导致伪造依赖关系,这些依赖关系具有我们需要发布的库以及其他模块需要声明的依赖关系的启动效果。控制PicoContainer启动的顺序

因此,我写了一个简单的启动框架,我基本上只是将一堆Runnable对象放入列表中,然后按顺序运行它们 - 并且工作正常。

但是我在想 - 我们已经PicoContainer的在我们的项目,所以所有这些东西,需要在启动时运行可能被扔进PicoContainer的,如果他们实施可启动,他们将开始...

但在某些情况下,我们想要指定它们之间的顺序。例如,我们不希望任何其他组件写入日志,然后再向日志中写入一个表示应用程序正在启动的标头。我知道我可以通过引入注入依赖来介绍排序,但是在这种情况下,这感觉就像是黑客攻击 - 我需要添加日志头文件作为每个可能写入日志的其他组件的依赖项,这不是很好所有。

尽管如此,它似乎是很好的控制PicoContainer启动顺序,所以也许还有其他方式?

或者我可以保持简单并坚持我的Runnable列表。毕竟,它的确工作。

回答

0

您的组件当前如何写入日志?我会希望在日志中存在一个(picocontainer)依赖项,然后该日志的构造函数将写入该头文件。 如果日志记录没有被注入并且完全绕过PicoContainer,我不会带入标题部分,我会保持这个独立性,就像其余的日志记录一样。

+0

实际上,将启动头写入记录器的组件是一个独立于记录器本身的组件(单一责任原则,以及所有这些)。 – Trejkaz 2010-11-04 09:03:27

2

您无法控制默认的开始/停止顺序,但您可以确定订购自己的生命周期。

例如:

1)使具有你的界面MyStartable方法init()和延伸可比性。

2)添加容器组件MyStart,使用MyStartable的列表或数组进行初始化。

3)手动或使用标准开始启动MyStart /停止MyStart生命周期

4)根据自然顺序,你应该重写列表/阵列只是排序。

5)上的每个MyStartable

我想有更多的“本土”的方式来做到这一点,通过生命周期管理器,但需要探索来源调用的init()。