【发布时间】:2016-07-01 13:32:33
【问题描述】:
我目前正在编写一个在 OSGi 环境中运行的应用程序。
对于可视化部分,我使用的是 JavaFX。每个 UI 元素都是扩展 BorderPane 的可停靠视图。其内容使用 fxml 文件中的 fx:root 元素进行描述。其中一些 UI 元素需要访问 OSGi 容器中的服务(例如,视图中的按钮可能会触发需要引用 PersistenceService 的保存操作)。
实现这一目标的最佳方法是什么?
UI 元素由我使用的框架自动生成。访问服务的唯一方法是BundleActivator 或静态方法FrameworkUtil.getBundle()。
我的方法是使用静态实用程序方法,但在网上阅读了更多内容后,我意识到您通常不想针对 OSGi 本身编写代码。
另一种解决方案是使用 Apache Felix 提供的 scr 注释。将 UI 元素标记为 @Component 并通过 @Reference 引用每个需要的服务都可以。但这是好的做法吗?我应该注释它们吗?我一直认为@Component 引用的类是由OSGi 本身管理的,并且总是由OSGi 实例化。
【问题讨论】:
标签: java javafx osgi apache-felix osgi-bundle