我正在开发一个NetBeans平台应用程序,并希望使用lookup api来获取特定接口的实现,仍然保持松散耦合的所有内容。 但查找无法找到任何服务提供商。
好吧,我创造了:
要注册我使用 @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书上的说明,但似乎没有任何效果。希望有人能帮助我解决这个问题。
谢谢;)
答案 0 :(得分:0)
我已经为GitHub上的这种情况创建了一个工作示例。
https://github.com/flinkgutt/stackoverflow/tree/master/LooseCoupling