[英]ServiceLoader to find implementations of an interface
我嘗試使用 Java ServiceLoader來查找實現特定接口的所有類,如下所示:
loader = ServiceLoader.load(Operation.class);
try {
for (Operation o : loader) {
operations.add(o);
}
} catch (ServiceConfigurationError e) {
LOGGER.log(Level.SEVERE, "Uncaught exception", e);
}
不幸的是,當我在調試模式下運行 Eclipse 時,ServiceLoader 找不到任何類。 我覺得我錯過了一個微不足道的點......
ServiceLoader
做不到。
為了將類公開為可由ServiceLoader
發現的ServiceLoader
您需要將其名稱放入提供者配置文件中,如使用 Java 平台創建可擴展應用程序中所述。
沒有內置方法可以找到實現特定接口的所有類。 可以做類似事情的框架使用他們自己的類路徑掃描解決方案(即使使用自定義類路徑掃描也不容易,因為.class
文件只存儲有關直接實現的接口的信息,而不是傳遞性的)。
如果實現是您自己編寫的,則可以使用AutoService通過ServiceLoader
接口使它們可用,例如
@AutoService(Operation.class)
class Foo implements FooInterface {
}
@AutoService(Operation.class)
class Bar extends Foo {
}
為了在運行時掃描您的類路徑以獲取特定接口的實現,您需要使用不同的解決方案,例如。 思考(通知S於結束,這不是Java的反射API)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.