簡體   English   中英

Java中的類加載器究竟是什么?

[英]What exactly are class loaders in Java?

當客戶在Java中說“Code不應該有自定義類加載器”時,這究竟意味着什么? 我不能做什么?

類加載器是Java中的一個對象,負責查找Java類的二進制表示並將它們加載到JVM中。 所有JVM都以引導類加載器開始,負責加載用戶的初始類,以及一些內置類型,如ClassSecurityManager ,但用戶可以提供自己的類加載器來查找其他來源的類。 例如,自定義類加載器可以通過編寫自己的字節碼來生成自己的類,也可以從聯網源中查找類。

為了符合客戶的要求,您不應該定義自己的類加載器,而應該依賴引導類加載器來查找所有類。 這幾乎普遍是在簡單的Java程序中完成的,因為自定義引導加載程序的用例通常相當復雜和細微差別。 除非您特別想要更改JVM查找和加載類的方式,否則您不必擔心此限制。

自定義類加載器通常用於動態生成代碼或增強現有類。

例如,一些ORM實現(JDO)使用它來創建處理將Java對象轉換為數據庫表的代碼。 其他用途是在透明群集解決方案(如Terracota)中,其中對象被增強,以便它們自動在群集中自我復制。

這基本上阻止您動態生成代碼並將其注入現有應用程序。

類加載器是負責加載類的對象。 每當使用new實例化一個類時,運行時系統都會嘗試使用ClassLoader抽象類的一個或多個實例加載該類。 您可以定義自定義類加載器以從網絡,數據庫,其他進程或任何可能的數據源加載類。

因此,如果您的客戶端不希望您使用自定義類加載器,那么請務必不要編寫擴展ClassLoader或其任何派生類的類。 有關更多詳細信息,請參閱ClassLoader java API文檔。

自定義類加載器允許您從非常規源(從您可以想象的任何地方加載類,包括無處不在,即即時創建)加載類。 由於您的客戶端正在說該消息,因此只能從標准源(例如文件系統,jar文件等)加載類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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