2013-03-14 68 views
2

我正在尋找一種方法來查找當前在繼承給定接口的JVM中運行的所有實例,如interfaceA。我最初收到的建議是實施了InterfaceA類的定義之前使用如何查找繼承給定接口的類實例?

Lookup.getDefault().lookupAll(interfaceA.class); 

@ServiceProvider(service=interfaceA.class) 

。我發現這確實找到了實現interfaceA的類。但是,我非常肯定,Lookup爲我提供了一個使用java反射的類的新實例。我最大的問題是我對我可以在我的Netbeans項目中引入的庫有限,否則以前的問題可能會回答這個問題。

這樣的動物存在於純Java還是非常知名的庫中?

謝謝

回答

1

沒有。由於Java在需要時動態加載類,因此無法真正「枚舉」JVM可用的所有類。大多數用於完成此操作的機制都涉及預先在路徑中的某處(XML文件,屬性文件)列出所有子類並使用它,或者通過某些容器將它們標記爲某種運行時處理(您的@ServiceProvider註釋) 。 Java EE,Spring和Guice是一些衆所周知的容器 - 但是這樣的代碼在這樣的容器之外不起作用。

我也看過一些代碼,它試圖遍歷類路徑上的所有jar,但是這樣的代碼非常脆弱,通常與它運行的特定環境綁定在一起。

+0

我很害怕這個。我將使查找方法起作用。感謝您的幫助。 – Madviola 2013-03-14 18:26:39