java - 为什么要在 OSGi 中创建和使用服务

标签 java osgi

过去一周我一直在研究 OSGi,但唯一的原因似乎并不合适,那就是为什么我需要在可以的情况下注册和使用任何 bundle只需导入其 JAR 文件即可完成此操作。 这样做我能获得什么好处?是的,我确实得到了依赖管理,但是:

我可以通过导入未注册为 services 本身的任何其他 JAR 文件来使用它们吗? 如果是,我为什么要承担使用 OSGi 的开销?

最佳答案

OSGi 的整体理念是获得模块化:关注点和功能清晰分离,并可以在需要时使用不同版本或实现来替换或更新功能。

通过导入 jar,您可以实例化在其他 jar 中声明的类,但不能用其他实现或版本替换它(运行时!)。 OSGi 服务的想法是,您定义一个 Java 接口(interface),并通过在 OSGi 服务注册表中查找其实现来从客户端使用该接口(interface),而客户端实际上并不知道该接口(interface)的实现。这使得可以在运行时用另一个版本甚至完全不同的解决方案替换实现,而无需客户端担心。通过实例化另一个 jar 中的类是不可能的。

当然,如果你不需要这个,你可能会认为 OSGi 只是一个很大的开销。您可能是对的,具体取决于您的情况。我发现遵循 OSGi 的结构可以让您更好地了解应用程序的组件和整体架构之间的关系。从维护角度来看,这是一个巨大的好处。

关于java - 为什么要在 OSGi 中创建和使用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20323063/

相关文章:

java - 如何从 java 应用程序使用 OSGi

java - 使用 Android MediaRecorder 录制 webm

java - 如何在Adobe CQ5.5中使用DataSourcePool?

jpa - Apache Aries 托管 JPA 支持哪些 JPA 提供程序?

java - 使用 Tycho 项目构建 eclipse 功能时偶尔会出错

java - 如何使文本框在处理中发挥作用?

java - 在 Java 中使用 UUID 的最高有效位发生冲突的可能性

java - 使用java程序添加环境变量,并能够在我从我的电脑打开环境选项卡时看到

java - 文件扩展名上的spring requestmapping http错误406

java - 如何避免 karaf 加载默认解析包