[英]Priority classloader in Java
我想實現PriorityClassLoader
,它可以執行以下操作:
ClassLoader
實例作為構造函數參數 addURL
方法,其作用類似於URLClassLoader
addURL
,但是它為每個新URL設置了優先級。 當應該加載該類時,加載器首先將嘗試使用默認的類加載器(如果沒有加載)-根據優先級從提供的URL中加載。 有沒有現成的解決方案?
PS-我的最初問題是-我想向系統類加載器添加URL,但是由於系統類加載器和遠程JAR中重復的類,它開始失敗。
我偶然發現了一個有趣的庫JCL ,我這樣做是這樣的:
JarClassLoader jcl = new JarClassLoader();
jcl.add(new URL("hive://" + pageURL.getHost() + ":" + pageURL.getPort() + "/" + pageURL.getApplicationName() + "/origJar.jar"));
jcl.getSystemLoader().setOrder(1);
jcl.getThreadLoader().setOrder(2);
jcl.getCurrentLoader().setOrder(3);
jcl.getParentLoader().setOrder(4);
jcl.getLocalLoader().setOrder(5);
Thread.currentThread().setContextClassLoader(jcl);
要回答這個問題,我從未聽說過任何現成的解決方案,但是可以通過一些自定義的類加載器來完成,這是此博客文章中的一個簡化示例:
public class ExampleFactory {
public static IExample newInstance() {
URLClassLoader tmp =
new URLClassLoader(new URL[] {getClassPath()}) {
public Class loadClass(String name) {
if ("example.Example".equals(name))
return findClass(name);
return super.loadClass(name);
}
};
return (IExample)
tmp.loadClass("example.Example").newInstance();
}
}
對於原始問題,您是否嘗試過將庫放在認可的目錄中? 這是一種JDK標准機制,允許在JVM引導程序類加載器級別添加庫。
根據您的服務器,還有其他替代方法可以放置這些類。 如果以上方法均無濟於事,則最好提供有關原始問題的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.