Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发布的OSGI服务是否需要导出其包?_Osgi - Fatal编程技术网

发布的OSGI服务是否需要导出其包?

发布的OSGI服务是否需要导出其包?,osgi,Osgi,是否需要导出包含OSGI服务的包才能发布到服务注册表?或者发布到服务注册中心是否可以避免导出包的需要 服务的类型应在导出包中。服务是类型化的,并建立在模块层的类型共享之上。因此,您需要确保服务的提供者和服务的使用者都可以共享相同的类型。因此,某些捆绑包必须导出包含该类型的包,以便提供者和使用者可以导入该包。这允许框架验证服务的类型安全性。服务的类型应在导出包中。服务是类型化的,并建立在模块层的类型共享之上。因此,您需要确保服务的提供者和服务的使用者都可以共享相同的类型。因此,某些捆绑包必须导出包

是否需要导出包含OSGI服务的包才能发布到服务注册表?或者发布到服务注册中心是否可以避免导出包的需要

服务的类型应在导出包中。服务是类型化的,并建立在模块层的类型共享之上。因此,您需要确保服务的提供者和服务的使用者都可以共享相同的类型。因此,某些捆绑包必须导出包含该类型的包,以便提供者和使用者可以导入该包。这允许框架验证服务的类型安全性。

服务的类型应在导出包中。服务是类型化的,并建立在模块层的类型共享之上。因此,您需要确保服务的提供者和服务的使用者都可以共享相同的类型。因此,某些捆绑包必须导出包含该类型的包,以便提供者和使用者可以导入该包。这允许框架验证服务的类型安全性。

简短回答;第一个问题=否,第二个问题=否,没有“变通办法”

“合同设计”原则开始发挥作用。基本上,我们为消费者提供了一个可依赖的接口,为提供者提供了可实现的接口——这使消费者代码与实现者的实现细节分离。请参阅,以了解详细的概述和说明

考虑到接口(我们希望使用的API)和实现(API接口的具体实现)以及使用者(希望使用接口实现的代码),使用OSGi您有很多选择

  • 捆绑包可以提供接口和实现,但如果要在捆绑包本身之外使用此服务,则必须导出接口
  • 为接口(它导出)提供单独的捆绑包,并为实现提供其他捆绑包——实现捆绑包必须导入接口的包,但不需要显示自己的实现
  • 数字2的优点包括允许多个提供者(OSGi使用LDAP过滤器,可用于指定注册服务属性上的元数据匹配),以及利用OSGi的动态绑定特性(即,您可以在运行时更改实现提供者)


    需要记住的一点是,使用者和提供者必须使用包版本和导出捆绑包定义的相同类(换句话说,加载API类的捆绑包类加载器对于使用者和提供者都必须相同)。

    简短回答;第一个问题=否,第二个问题=否,没有“变通办法”

    “合同设计”原则开始发挥作用。基本上,我们为消费者提供了一个可依赖的接口,为提供者提供了可实现的接口——这使消费者代码与实现者的实现细节分离。请参阅,以了解详细的概述和说明

    考虑到接口(我们希望使用的API)和实现(API接口的具体实现)以及使用者(希望使用接口实现的代码),使用OSGi您有很多选择

  • 捆绑包可以提供接口和实现,但如果要在捆绑包本身之外使用此服务,则必须导出接口
  • 为接口(它导出)提供单独的捆绑包,并为实现提供其他捆绑包——实现捆绑包必须导入接口的包,但不需要显示自己的实现
  • 数字2的优点包括允许多个提供者(OSGi使用LDAP过滤器,可用于指定注册服务属性上的元数据匹配),以及利用OSGi的动态绑定特性(即,您可以在运行时更改实现提供者)

    需要记住的一点是,使用者和提供者必须使用包版本和导出捆绑包定义的相同类(换句话说,加载API类的捆绑包类加载器对于使用者和提供者都必须相同)