我目前正在从“标准 OSGi”移植一个非常好的使用 OSGi 和 Vaadin 的模块化 Web 界面演示,以使用 Spring DM。
列出了一个 OSGi 配置文件:
<reference name="PersonListener"
interface="com.siemens.ct.pm.model.IPersonListener"
bind="addPersonListener"
unbind="removePersonListener"
cardinality="0..n"
policy="dynamic"/>
我意识到在 Spring DM 中必须使用侦听器来完成,因此以下 bean 配置:
<osgi:list id="personListeners" interface="be.nnuytten.pm.model.IPersonListener" cardinality="0..N">
<osgi:listener ref="personManager" bind-method="addPersonListener" unbind-method="removePersonListener" />
</osgi:list>
在参考文档中,我发现addPersonListener和removePersonListener方法需要以下签名:
public void anyMethodName(ServiceReference ref);
说了这么多,但现在问题来了:我如何使用这个 ServiceReference 对象?更具体地说,如何使用 ServiceReference 实现以下目标?
public synchronized void addPersonListener(IPersonListener personListener) {
logger.info("add personListener: " + personListener);
personListeners.add(personListener);
}
现在必须通过以下方式实现相同的功能
public void addPersonListener(ServiceReference ref){}
一如既往地感谢您的帮助!