4

我需要有最简单的方法来通过外部 jar 提供接口的实现。我想避免使用 text/xml 文件,因为在重构类或接口名称时可能会导致错误。

我尝试了 Netbeans Lookup,因为它有一个@ServiceProvider 注释应该以声明方式注册实现。

所以我写了一个简单的试用代码,它甚至没有在不同的 jar 中拆分接口和提供程序,但它仍然无法查找组件:

import org.openide.util.Lookup;
import org.openide.util.lookup.ServiceProvider;

public class LookupTrial {
public static void main(String[] args) {
    IService s = Lookup.getDefault().lookup(IService.class);
    if(s==null)
        throw new RuntimeException("lookup failed");
    else
        s.hello();
}

public interface IService{
    public void hello();
}

@ServiceProvider(service=IService.class)
public class MyImplementation implements IService{
    public MyImplementation(){}

    @Override
    public void hello() {
        System.out.println("hello lookup");
    }
}
}

我是否错误地使用了 Lookup?我应该搜索另一个查找库来做我想做的事吗?

4

1 回答 1

1

我找到了解决方案。注释由 Netbeans IDE 以某种方式解析,@ServiceProvider并创建一个文件结构,该结构表示服务及其实现的映射。如果您在没有能够做到这一点的 IDE 的情况下工作(我猜只有 NB 会这样做),那么您可能必须手动创建这些文件,并且注释将不起作用。如果有人证明我错了,我会很高兴,尤其是对于 Intellij IDEA。

有关创建文件结构以使用 Lookup 的信息,请参见此处

在 Netbeans 平台应用程序之外使用 Lookup API 的另一种方法可能是AbstractLookupInstanceContent类。在这里查看如何使用它们。

于 2014-04-11T06:27:05.263 回答