我应该如何通过OSGi声明性服务声明has-a依赖?

时间:2011-09-16 18:22:27

标签: java osgi declarative-services

我的OSGi应用程序使用白板模式为特定状态更改注册侦听器。我使用org.apache.felix.scr.annotations来声明我的服务和组件,而不是手工编写声明性XML。将组件注册为ChangeListener的最简单方法是:

@Component(name="...")
@Service
public class MyComponent implements ChangeListener {
    @Override public void changeOccurred(...) {
        // ...
    }
    // ...
}

这是一种关系,它将我的组件暴露给任何要求它的人。相反,我想要一个has-a关系来通过内部类注册我的ChangeListener。但与上述相比,以下内容非常难看。

@Component(name="...")
public class MyComponent {
    private ServiceRegistration registration;

    protected final void activate(final ComponentContext context) {
        registration = context.getBundleContext()
               .registerService(ChangeListener.class.getName(),
        new ChangeListener() {
            @Override public void changeOccurred(...) {
                // ...
            }
        }, null);
    }
    protected final void deactivate(final ComponentContext context) {
        registration.unregister();
    }
    // ...
}

有没有更好的方法来实现包含的侦听器,它不是那么冗长但仍能实现内部类的信息隐藏?

0 个答案:

没有答案