本文介紹了如何通過類名字符串從OSGi運行時環境加載類?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在做一個包來插入OSGi,為用戶提供一個功能:
Usercase: User input the classname string and click "list" button, the corresponding class will be decompiled and show the text on GUI for user.
這就是我的問題:我只有捆綁包的類加載器,如何才能獲得OSGi容器類加載器,以便可以從整個OSGi容器按名稱加載類?(我預計當OSGi啟動時,它會將所有包和所有類加載到內存中,如果OSGi容器類加載器確實存在并且能夠加載任何類,它都可以加載)
有人知道怎么做這項工作嗎?非常感謝示例代碼。
推薦答案
我看到兩種可能對您有幫助的情況。
任何可見類
您可以添加類似
的語句
DynamicImport-Package: *
添加到您的清單中,然后嘗試使用
Class.forName("com.company.class");
所有類,無論是否導出
如果您確實需要查找每個可用類,我不確定您為什么要這樣做,但是您可以嘗試詢問每個包是否”知道”給定的類。由于在這種情況下,您最終可能會有多個同名的類,因此您可以選擇正確的類。
您可以這樣做
private List<Class<?>> findClass(BundleContext context, String name) {
List<Class<?>> result = new ArrayList<Class<?>>();
for (Bundle b : context.getBundles()) {
try {
Class<?> c = b.loadClass(name);
result.add(c);
} catch (ClassNotFoundException e) {
// No problem, this bundle doesn't have the class
}
}
return result;
}
這篇關于如何通過類名字符串從OSGi運行時環境加載類?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,