3

我的任务是对我们如何启动应用程序进行一些重构工作。基本上,我们有一堆控制台应用程序,它们依赖于 GUI 应用程序启动代码,导致虚假依赖项,这些依赖项对我们需要发布哪些库以及其他模块需要声明哪些依赖项具有启动效应。

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

但我在想——我们的项目中已经有了 PicoContainer,所以所有这些需要在启动时运行的东西都可能被扔到 PicoContainer 中,如果他们实现了 Startable,他们就会开始......

但在某些情况下,我们希望指定它们之间的顺序。例如,在我们将标头写入日志以指示应用程序正在启动之前,我不希望任何其他组件写入日志。我知道我可以通过引入注入依赖项来引入排序,但在这种情况下这感觉就像是一个 hack - 我需要添加日志头编写器作为可能写入日志的所有其他组件的依赖项,这不是很好全部。

尽管如此,控制 PicoContainer 启动的顺序似乎还是不错的,那么可能还有其他方法吗?

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

4

2 回答 2

2

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

例子:

1)使您的接口 MyStartable 具有方法 init() 并扩展 Comparable。

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

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

4)在 MyStart 中,只需根据您应该覆盖的自然顺序对列表/数组进行排序。

5) 在每个 MyStartable 上调用 init()

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

于 2012-05-05T12:07:46.280 回答
0

您的组件当前如何写入日志?我希望日志有一个(picocontainer)依赖项,然后该日志的构造函数将写入标题。如果日志没有注入并且完全绕过 PicoContainer,我不会只引入标题部分,我会像其他日志一样将其分开。

于 2010-11-03T22:12:14.977 回答