【发布时间】: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