2012-05-31 138 views
7

最近我來到java定製類加載器api。我在這裏找到一個用法,kamranzafar's blog 我對類加載器概念有點新鮮。任何人都可以詳細解釋,我們可能需要它的不同場景有哪些,或者我們應該使用它?什麼是自定義類加載器

+0

寫好自定義類加載器的好文章。 http://www.journaldev.com/349/java-classloader –

回答

22

自定義類加載器在由多個模塊/應用程序組成的較大體系結構中非常有用。下面是自定義類加載器的優點:

  • 提供模塊化結構可以定義多個類加載器允許模塊化架構。
  • 避免衝突顯然定義了類的範圍的類加載器內。
  • 支持版本支持不同的模塊相同VM內的​​不同版本的類。
  • 更好的內存管理未使用的模塊可被移除,其卸載由該模塊,其清理內存使用的類。
  • 從任何地方加載班級班級可以從任何地方加載,適用於ex,數據庫,網絡,甚至可以動態定義
  • 添加資源或類動態所有上述功能允許您添加類或資源動態。
  • 運行時重新加載修改過的類允許您創建一個子類加載器到實際的類加載器,其中包含修改的類重載類或類運行。
+3

一個有趣的(酷?)從任何地方加載類的例子可以在這裏看到:http://99-bottles-of-beer.net/language- java-1162.html – Crollster

+0

@Ramesh PVK感謝您的描述。但如果您可以提供一些示例代碼來理解您所描述的內容,那麼它非常令人欽佩。希望你會像我們這樣對java感興趣的人做到這一點。 –

11

主要用途是在應用程序服務器中,以便它們可以運行兩個應用程序並且不會產生類衝突。即如果應用程序1具有與應用程序2相同名稱的類,則具有定製類裝載器應用程序1將加載其類,並且應用程序2將加載其類。

此外,如果一個類由一個自定義的類加載器加載能夠從JVM卸載該類。在應用程序服務器中再次有用

另一個用途是用於檢測 - 一種做面向方面編程或者使用一些持久性API的方法。使用自定義類加載器,您可以在加載的類傳遞到正在運行的應用程序之前向其中添加行爲。

2

Java類加載器的名稱的確如此:將類加載到內存中以便可以使用它們。

類還與加載它們的ClassLoader鏈接。因此

自定義類裝載器開拓各種有趣的可能性:

  • 載入與不同類加載器相同的類的多個版本(例如,以解決例如可能版本conficts)
  • 裝卸類動態在運行時
  • 生成新的類(例如JVM語言例如Clojure使用不同的類加載技巧產生新編譯的類從非標準源

普通的Java應用程序通常不需要擔心的類加載器代表在運行時

  • 加載類Clojure的功能)。但是,如果你正在編寫一個需要託管其他代碼的框架或平臺,那麼它們變得更加重要/相關。

  • 相關問題