簡體   English   中英

ServiceLoader 查找接口的實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM