我的任务是对我们如何启动应用程序进行一些重构工作。基本上我们有一堆控制台应用程序,它们取决于GUI应用程序启动代码,导致虚假的依赖关系,这些依赖关系对我们需要发布的库以及其他模块需要声明的依赖项具有启动效果。
所以我编写了一个简单的启动框架,我基本上只是将一堆Runnable对象放入一个列表中,然后按顺序运行它们 - 它可以工作。
但我在想 - 我们的项目已经有了PicoContainer,所以所有这些需要在启动时运行的东西都可能被扔进PicoContainer,如果它们实现了Startable,它们就会开始......
但在某些情况下,我们希望指定它们之间的顺序。例如,在我们向日志中写入标题指示应用程序正在启动之前,我不希望任何其他组件写入日志。我知道我可以通过引入注入依赖项来引入排序,但在这种情况下这感觉就像一个hack - 我需要添加日志头编写器作为可能写入日志的每个其他组件的依赖项,这不是很好所有
尽管如此,控制PicoContainer启动的顺序似乎很好,所以可能还有其他方式吗?
或者我可以保持简单并坚持我的Runnable列表。毕竟,它确实起作用了。
答案 0 :(得分:2)
您无法控制默认的开始/停止顺序,但您肯定可以订购自己的生命周期。
示例:
1)使您的界面MyStartable具有方法init()并扩展Comparable。
2)添加使用MyStartable的列表或数组初始化的容器组件MyStart。
3)手动启动MyStart或启动标准启动/停止生命周期
4)在MyStart中,只需按照你应该覆盖的自然顺序对列表/数组进行排序。
5)在每个MyStartable上调用init()
我想通过生命周期经理可以采用更“原生”的方式来实现这一目标,但需要探索来源。
答案 1 :(得分:0)
您的组件当前如何写入日志?我希望有一个(picocontainer)依赖日志,然后该日志的构造函数将写入标题。 如果没有注入日志记录并完全绕过PicoContainer,我不会只带入标题部分,我会保持分开,就像其余的日志记录一样。