我在将应用程序拆分为模块时遇到问题。我发现了 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/