Java自定義ClassLoader實現


  上文說Java中的ClassLoader機制,在文章末尾說要自定義一個類加載器,現在就來實現下。
  實現自定義ClassLoader
  前文說過如果通過classLoader的loadClass方法來加載類,需要實現findClass方法,在這個方法中自定義獲取文件的字節數組,再調用defineClass方法實現類的加載。
  說明:如果不通過loadClass來加載類,可以不重寫findClass方法。
  以下是自定義類加載器的步驟:
  繼承ClassLoader抽象類,也可以繼承其他類比如URLClassLoader,AppClassLoader和ExtClassLoader都繼承於URLClassLoader。
  創建構造方法,並且構造方法中調用父類的構造方法,如果要加載的類在當前的classpath下,應該傳入空的parent,避免AppClassLoader加載此類。
  重寫findClass方法,在這個方法中需要調用父類的defineClass方法,這個方法需要傳入類文件的字節數組。
  定義一個讀取類文件的方法,傳入類的全名稱,方法字節數組。
  以下就是完整的自定義classloader,可以參考下。

  定義好了ClassLoader,我們就使用自定義的classloader來加載個類,我們用loadClass方法,最后輸出classLoader對象,來驗證是否是我們所定義的。

  如果在上面的代碼中添加一句T2t2=(T2)aClass1.newInstance(),在運行中會報類轉換錯誤,因為T2是AppClassLoader加載的,后面的aClass1是自定義類加載器加載的,肯定不能轉換,如果想要調用T2中的方法,可以用反射方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM