1

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

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

这是一种 is-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();
    }
    // ...
}

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

4

0 回答 0