OSGi 和 Java 服务提供商接口有什么区别?

What's the difference between OSGi and Java Service Provider Interface?

OSGi 和 JavaSPI 有什么区别?有什么优缺点?

Java SPI 主要用于提供 Java 标准的实现。这种方法在客户和服务提供者之间提供了一些解耦。实现 类 在 META-INF/services 中定义。 这是一个非常简单的模型。一个实现不能注入其他服务,也没有配置模型。所以这主要适用于没有其他依赖项的低级服务。

OSGi 还支持客户端和服务提供者的解耦。它还允许配置和动态注册服务。还有一些可以互操作的编程模型,如声明式服务和 CDI。

OSGi 的缺点是它要求所有的库都存在于一个模块化的类加载器中,并处理 jar(包)的动态加载和卸载。由于并非所有库都是这样构建的,因此只有一组有限的 java 库实际上在 OSGi 中运行良好。