【问题标题】:Lookup API NetBeans Platform + Maven: loosely coupled modulesLookup API NetBeans Platform + Maven:松散耦合的模块
【发布时间】:2014-05-05 15:31:45
【问题描述】:

我正在开发一个 NetBeans 平台应用程序,并希望使用查找 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 的实现,我会得到一个空指针异常。换句话说,没有注册的实现。查找找不到任何服务提供商。 Annotation processcor 工作正常,因为在 META-INF/.../ 目录中创建了文件。

似乎唯一可行的方法是在模块 A BUT 中定义对模块 B 的依赖关系,这样就丢失了松散耦合模块的方面。

我按照 NetBeans 平台网站和 NetBeans 平台 7 书上的说明进行操作,但似乎没有任何效果。希望有人能帮我解决这个问题。

谢谢 ;)

【问题讨论】:

    标签: netbeans-platform loose-coupling


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的努力,克里斯蒂安!所以我在开发时要做的就是定义对 projectname-app 中所有模块的依赖关系,对吗?部署后如何添加新模块(让我说一个新的 prot impl)?更新中心会自动定义依赖吗?
    猜你喜欢
    • 2017-06-05
    • 2011-01-20
    • 2013-05-06
    • 2020-10-26
    • 2011-02-22
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多