java - 如何从实现相同接口(interface)的多个 bundle 中使用正确的 bundle ?

标签 java web osgi

我在将应用程序拆分为模块时遇到问题。我发现了 OSGi,但我不确定它是否能解决我的问题。

假设我有核心网络应用程序。此应用程序在表中显示仪表板列表(包含“所有者名称”、“描述”、“创建日期”列)。当我单击列表上的仪表板时,我会重定向到仪表板屏幕。

现在事情变得复杂了。这些仪表板可以是不同类型的(公司仪表板、个人仪表板等)。这些类型应该是可选模块(根据实例,在实现时可能只有一种类型或两种或多种类型)。

现在: 我有我的应用程序的核心,我想在不知道其类型的情况下创建仪表板列表。假设我有一些仪表板界面。我使用 Dashboard.getName、Dashboard.getDescription、Dashboard.onClick 等。我不希望核心了解连接的 bundle 。现在,当单击仪表板时,它应该加载并显示正确类型的仪表板(CompanyDashboard 或 PersonalDashboard)。

如何在核心不知道可用类型的情况下加载正确的类型。 OSGi 是正确的工具吗?

最佳答案

您可以为此使用 OSGi 服务。您可以在其自己的包中创建一个通用的仪表板界面。然后,您可以拥有多个 bundle ,每个 bundle 提供一个仪表板。在每个 bundle 中,您创建 DashBoard 实例并使用通用接口(interface)发布它。 然后,您就有一个包实现带有仪表板列表的中央 View 。在此 bundle 中,您监听 DashBoard 类型的所有服务并列出它们。

所以技巧是不要实例化中央包中的各个实例。

关于java - 如何从实现相同接口(interface)的多个 bundle 中使用正确的 bundle ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34806254/

相关文章:

html - 添加列表时 Logo 移出菜单

css - pictonic 是如何工作的?

javascript - 未捕获( promise )TypeError : Cannot read property 'style' of null

java - Apache felix 和 org.osgi 用于 Weld cdi - 违反约束

spring - Camel , Spring ,OSGI : Is there a way to specify the stop method?

java - 单击按钮后如何将数据从 vector 更新到 JTable

java - Spring jpa在回滚期间保存数据

java - Java 中的图表绘制

java - Gradle 测试运行两次

java - 为什么切换会导致无法解决错误?