假设我有一个包想要向所有监听器广播信息。考虑到我正在使用声明性服务,其中 MyComponent
消耗 0..n ComponentListeners
,我会得到如下内容:
public class MyComponent {
private List<ComponentListener> listeners;
private String data;
public MyComponent() {
listeners = new ArrayList<>();
}
// Someone else will call this
public void updateData(String newData) {
data = newData;
notifyAll(data);
}
// Broadcasts the data to all listeners
private void notifyAll(String data) {
for (ComponentListener listener : listeners) {
listener.updateData(data);
}
}
// Declarative Service binding methods
public void bindComponentListener(ComponentListener cl) {
listeners.add(cl);
}
public void unbindComponentListener(ComponentListener cl) {
listeners.remove(cl);
}
}
我的问题是:
- 是否建议使用 0..n 基数?我发现的唯一例子来自 Apache Felix tutorial ,与上面的类似。
- 观察者/可观察方法被认为是 OSGi 中的良好实践吗?
- 如果我想通知所有监听器,我应该在每个监听器的不同线程中调用
listener.updateData(data);
,对吗?这样,我可以确保所有听众都会同时收到通知。
最佳答案
如果您的主要目标是广播信息,您也可以使用 OSGi 事件管理器,felix 有一个 quick tutorial以及。通过服务处理您自己的监听器可能是 considered harmful .
关于java - 以 0..n 基数绑定(bind) OSGi 服务的良好实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25657257/