查找API NetBeans平台+ Maven:松散耦合的模块

时间:2014-05-05 15:31:45

标签: netbeans-platform loose-coupling

我正在开发一个NetBeans平台应用程序,并希望使用lookup api来获取特定接口的实现,仍然保持松散耦合的所有内容。 但查找无法找到任何服务提供商。

好吧,我创造了:

  • 一个模块(A),它包含两个接口(Prot,Com)和一个显示某些GUI的类。
  • 包含接口Prot
  • 的实现的模块(B)
  • 包含接口COM实现的模块(C)。

要注册我使用 @ServiceProvider 注释的实现。 对于模块B中的考试:

@ServiceProvider(service = Prot.class)
class ProtImpl implements Prot
{
   @Override
   ...
}

如果使用@ServiceProvider注释,我定义了所需的默认构造函数。 我定义了对模块A的依赖,因为B需要知道关于接口的一些信息。

模块A中的查找:

private void printImplNames()
{
   Prot prot = Lookup.getDefault().lookup(Prot.class);
   prot.getName(); // <--- Null-Pointer
}

现在,如果我查看接口Prot的实现,我会得到一个空指针异常。换句话说,没有注册实施。查找无法找到任何服务提供商。 注释processcor工作正常,因为创建了META-INF /.../目录中的文件。

似乎唯一有效的方法是在模块A BUT 中定义模块B的依赖关系,这样loosley耦合模块的方面就会丢失。

我遵循了NetBeans平台网站和NetBeans平台7书上的说明,但似乎没有任何效果。希望有人能帮助我解决这个问题。

谢谢;)

1 个答案:

答案 0 :(得分:0)

我已经为GitHub上的这种情况创建了一个工作示例。

https://github.com/flinkgutt/stackoverflow/tree/master/LooseCoupling