0

我想知道什么是组织我的包的好方法,以便可以在它们之间共享作为服务参数所需的类。

我有几个服务接口,它们公开需要在bundes之间引用的类类型,例如:

public interface DoesThis {
   public CustomClassB doSomething(CustomClassA customClassA);
}

据我了解CustomClassA(如果在与公开服务相同的捆绑包中定义)将无法用于其他捆绑包,那么最好在一个包中公开捆绑包之间的类引用,然后将其导出?

就像一个子问题:服务和包导出是否应该协同工作......从我正在阅读的文档中不清楚是否是这种情况?

谢谢

4

1 回答 1

1

基本上,是的。接口引用的所有类型都必须在导出的包中。有几个选项:

  • 它们可能与接口在同一个包中,在这种情况下,它们自然会与接口同时导出,因为在 OSGi 中,我们总是导出/导入整个包。
  • 它们可以在不同的包中,但由与服务接口相同的包导出。
  • 它们可能位于不同的包中并由不同的捆绑包导出。在这种情况下,服务接口包必须导入该包。

如果您考虑一下,不导出类型是没有意义的。例如,如果消费者doSomething无法创建CustomClassA要传入的类型对象,或者无法理解返回类型,消费者如何调用您的方法CustomClassB

关于您的子问题...是的,包导出主要是为了支持服务注册表。只有提供者和消费者能够就服务的“合同”达成一致,服务才能工作,在 Java 术语中,这意味着它们加载相同的接口。

于 2013-03-17T12:11:16.633 回答