JavaTM 2 Platform
Standard Ed. 6

javax.management.loading
介面 ClassLoaderRepository


public interface ClassLoaderRepository

此介面的實例用於保持在 MBean Server 中註冊的 ClassLoader 的列表。它們提供了使用註冊的 ClassLoader 來載入類別所必需的方法。

ClassLoaderRepository 中的首個 ClassLoader 始終是 MBean Server 本身的 ClassLoader。

當在 MBean Server 中註冊 MBean 時,如果它是 ClassLoader 的一個子類別,並且它不實作 PrivateClassLoader 介面,那麼將它添加到 MBean Server 的 ClassLoaderRepository 的末尾。如果以後從 MBean Server 註銷它,則它將從 ClassLoaderRepository 中移除。

ClassLoaderRepository 中的 MBean 順序是很重要的。對於 ClassLoaderRepository 中的任意兩個 MBean XY,如果在 Y 的註冊開始之前已完成 X 的註冊,則 X 必須出現在 Y 的前面。如果 XY 是同時註冊的,則它們的順序是不確定的。註冊 MBean 對應於調用 MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName) 或某個 MBeanServer.createMBean 方法。

從以下版本開始:
1.5
另請參見:
MBeanServerFactory

方法摘要
 Class<?> loadClass(String className)
          通過類別載入器列表載入給定的類別名稱。
 Class<?> loadClassBefore(ClassLoader stop, String className)
          通過類別載入器列表載入給定的類別名稱,在某個給定的類別載入器處停止。
 Class<?> loadClassWithout(ClassLoader exclude, String className)
          通過類別載入器列表載入給定的類別名稱,不包括某個給定的類別載入器。
 

方法詳細資訊

loadClass

Class<?> loadClass(String className)
                   throws ClassNotFoundException

通過類別載入器列表載入給定的類別名稱。依次請求 ClassLoaderRepository 的每個 ClassLoader 通過其 ClassLoader.loadClass(String) 方法來載入類別。如果它成功返回一個 Class 物件,則該物件就是此方法的結果。如果拋出 ClassNotFoundException,則繼續搜尋下一個 ClassLoader。如果拋出另一個異常,則從此方法傳播該異常。如果到達列表的末尾,則拋出 ClassNotFoundException

參數:
className - 要被載入的類別名稱。
返回:
載入的類別。
拋出:
ClassNotFoundException - 如果找不到指定的類別。

loadClassWithout

Class<?> loadClassWithout(ClassLoader exclude,
                          String className)
                          throws ClassNotFoundException

通過類別載入器列表載入給定的類別名稱,不包括某個給定的類別載入器。依次請求 ClassLoaderRepository 的每個 ClassLoader(除 exclude 之外)通過其 ClassLoader.loadClass(String) 方法來載入類別。如果它成功返回一個 Class 物件,則該物件就是此方法的結果。如果拋出 ClassNotFoundException,則繼續搜尋下一個 ClassLoader。如果拋出另一個異常,則從此方法傳播該異常。如果到達列表的末尾,則拋出 ClassNotFoundException

注意,如果 ClassLoaderRepository 中的某個 ClassLoader 從其 loadClass 方法調用此方法,那麼如果 ClassLoaderRepository 中的另一個 ClassLoader 同時也在執行相同操作,則該 ClassLoader 將發生死鎖。推薦使用 loadClassBefore(java.lang.ClassLoader, java.lang.String) 方法以避免死鎖風險。

參數:
className - 要被載入的類別名稱。
exclude - 不包括的類別載入器。可能為 null,在這種情況下此方法等效於 loadClass(className)
返回:
載入的類別。
拋出:
ClassNotFoundException - 如果找不到指定的類別。

loadClassBefore

Class<?> loadClassBefore(ClassLoader stop,
                         String className)
                         throws ClassNotFoundException

通過類別載入器列表載入給定的類別名稱,在某個給定的類別載入器處停止。依次請求 ClassLoaderRepository 的每個 ClassLoader 通過其 ClassLoader.loadClass(String) 方法來載入類別。如果它成功返回一個 Class 物件,則該物件就是此方法的結果。如果拋出 ClassNotFoundException,則繼續搜尋下一個 ClassLoader。如果拋出另一個異常,則從此方法傳播該異常。如果搜尋到達 stop 或列表的末尾,則拋出 ClassNotFoundException

通常從 stop 處的 loadClass 方法調用此方法,以參考 ClassLoaderRepository 中出現在它之前的的載入器。一旦遇到 stop,搜尋立即停止,這樣就避免了可能出現的共時類別載入死鎖。

參數:
className - 要被載入的類別名稱。
stop - 停止處的類別載入器。可能為 null,在這種情況下此方法等效於 loadClass(className)
返回:
載入的類別。
拋出:
ClassNotFoundException - 如果找不到指定的類別。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only