簡體   English   中英

Java中的優先類加載器

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

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