如何从几个实现相同接口的bundle中使用正确的bundle?

时间:2016-01-15 07:34:49

标签: java web osgi

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

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

现在事情变得复杂了。这些仪表板可以是不同类型(CompanyDashboards,PersonalDashboards等)。这些类型应该是可选模块(取决于实例,实现时可能只有一种类型或两者或更多)。

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

如何在没有核心知道可用类型的情况下加载正确的一个。 OSGi是否适合使用?

1 个答案:

答案 0 :(得分:1)

您可以使用OSGi服务。您可以在自己的包中创建一个公共DashBoard接口。然后你可以有几个包,每个包提供一个DashBoard。在每个捆绑包中,您可以创建DashBoard实例并使用公共接口发布它。 然后你有一个包用DashBoard列表实现中央视图。在此捆绑包中,您将侦听DashBoard类型的所有服务并列出它们。

所以诀窍是不要实例化中心包中的各个实例。