@ServiceDependency注解有什么影响

What are the impacts of the @ServiceDependency annotation

@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
        });
    }
}

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

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

请参阅 DependencyManager

的文档