gpt4 book ai didi

java - Netbeans 查找 : defining ServiceProvider with annotations and not via text/xml files

转载 作者:搜寻专家 更新时间:2023-11-01 03:39:26 25 4
gpt4 key购买 nike

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

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

所以我写了一个简单的试用代码,它甚至没有将接口(interface)和提供程序拆分在不同的 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 库来执行我想要的操作?

最佳答案

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

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

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

关于java - Netbeans 查找 : defining ServiceProvider with annotations and not via text/xml files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18508507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com