@ServiceDependency批注

时间:2016-04-10 10:11:35

标签: java annotations osgi

@ServiceDependency 注释对方法有何影响?

我正在尝试研究我下载的一些示例代码,其中有一个方法用@ServiceDependency注释。该方法永远不会在其他地方被调用。所以,我猜测@ServiceDependency注释使方法自动运行。这个注释真正做了什么,因为某些类中的某些成员变量用@ServiceDependency注释。

class UI {

    private final Map<ServiceReference, AppScreen> screens = new ConcurrentHashMap<>();

    @ServiceDependency(removed = "removeScreen")
    public void addScreen(ServiceReference<?> sr, AppScreen screen) {
        if (tabPane != null) {
            Platform.runLater(() -> {
                // Do something
            });
        }

        screens.put(sr, screen);
    }

    public void removeScreen(ServiceReference<?> sr) {
        Platform.runLater(() -> {
            AppScreen remove = screens.remove(sr);
            // DO something else
        });
    }
}

1 个答案:

答案 0 :(得分:3)

这个注释不是来自OSGi,而是来自Felix子项目,&#34; DependencyManager&#34;。它是帮助管理osgi服务的众多项目之一。在OSGi中,使用&#34; Declaratives Services&#34;,此注释称为@Reference

在您的示例中,当AppScreen的实例注册到OSGi Registry中时,将调用方法addScreen。取消注册此实例时,将调用方法removeScreen

请参阅DependencyManager

的文档