我的任务是做一些关于如何启动应用程序的重构工作。基本上,我们有一堆依赖于GUI应用程序启动代码的控制台应用程序,这导致了虚假的依赖关系,这些依赖关系对我们需要发布的库以及其他模块需要声明的依赖关系具有启动效果。
所以我已经写了一个简单的启动框架,基本上我只是把一堆可运行的对象放到一个列表中,然后按顺序运行它们-它就可以工作了。
但我在想-我们的项目中已经有了PicoContainer,所以所有这些需要在启动时运行的东西都有可能被抛到一个PicoContainer中,如果他们实现了Startable,他们就会启动……
但在某些情况下,我们希望指定它们之间的顺序。例如,在我们向日志中写入指示应用程序正在启动的标头之前,我不希望任何其他组件写入日志。我知道我可以通过引入注入依赖来引入排序,但在这种情况下,这感觉像是一个hack -我需要添加日志头编写器作为可能写入日志的每个其他组件的依赖,这一点都不好。
尽管如此,控制PicoContainer启动的顺序似乎很好,那么有没有其他方法呢?
或者,我可以保持简单,坚持我的Runnable列表。毕竟,它确实起作用了。
发布于 2012-05-05 20:07:46
你不能控制默认的开始/停止顺序,但你肯定可以有自己的生命周期顺序。
示例:
1)使您的接口MyStartable具有方法init()和扩展可比较方法。
2)添加以MyStartable列表或数组初始化的容器组件MyStart。
3)手动或使用标准的启动/停止生命周期启动MyStart
4)在MyStart中,只需按照应该覆盖的自然顺序对列表/数组进行排序即可。
5)在每个MyStartable上调用init()
我想有更多的“原生”方法可以做到这一点,通过生命周期管理器,但需要探索源代码。
发布于 2010-11-04 06:12:15
您的组件当前是如何写入日志的?我希望有一个(picocontainer)对日志的依赖,然后该日志的构造函数将写入头。如果日志没有被注入,并且完全绕过了PicoContainer,我就不会只引入头部分,我会像日志的其余部分一样保持独立。
https://stackoverflow.com/questions/2627218
复制相似问题