Netbeans Lookup:使用注释定义ServiceProvider,而不是通过text / xml文件定义

时间:2013-08-29 10:30:34

标签: java netbeans lookup netbeans-platform

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

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

所以我编写了一个简单的试用代码,它甚至不会在不同的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吗?我应该搜索另一个Lookup库来做我想做的事吗?

1 个答案:

答案 0 :(得分:1)

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

有关创建使用Lookup的文件结构的信息,请参阅here

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