在pub / sub模型中事件回调的Scala初始化

时间:2011-05-03 23:24:48

标签: java scala jvm

我有一个正在生成事件的发布者类,以及一些想要订阅事件以便运行自己的回调的侦听器类。

所有这些听众课程都是事先知道的。

我的所有听众在申请初始时订阅发布商的最佳方式是什么?我宁愿所有特定于侦听器的代码都是侦听器类的一部分。我认为监听器可以在静态块(Object)中订阅发布者,但是根据我的理解Java延迟加载类,所以不能保证所有监听器都会立即订阅。为了避免这种情况,我可能会做一些事情来强制JVM立即加载我的所有监听器?

我缺少哪些更简单的东西?

2 个答案:

答案 0 :(得分:2)

使用演员!每个发布者一个参与者,每个订阅者一个参与者。发布者维护订阅者列表。通过向发布者发送消息来添加订阅者:pub!添加(分)

当发布者要发布内容时,它会遍历每个订阅者和消息列表。请参阅http://www.scala-lang.org/node/242了解演员介绍。

答案 1 :(得分:1)

最好使用一些受控的运行时环境,如OSGiRCP,这是Eclipse的基础。它们为应用程序加载过程的声明性控制提供了很多方法,并在模块之间建立了编译和运行时依赖关系。

例如,您可以将所有侦听器打包为单独的bundle,将所有侦听器标记为不延迟加载,并将订阅代码添加到init挂钩。