JavaTM 2 Platform
Standard Ed. 6

java.beans
類別 Introspector

java.lang.Object
  繼承者 java.beans.Introspector

public class Introspector
extends Object

Introspector 類別為通過工具學習有關受目標 Java Bean 支持的屬性、事件和方法的知識提供了一個標準方法。

對於這三種資訊,Introspector 將分別分析 bean 的類別和父級類別,尋找顯式或隱式資訊,使用這些資訊建構一個全面描述目標 bean 的 BeanInfo 物件。

對於每個 "Foo" 類別,如果存在相應的 "FooBeanInfo" 類別,顯式資訊可能是可用的,查詢這些資訊時,FooBeanInfo 類別會提供一個非 null 值。通過獲得目標 bean 類別的完全受限定套件名稱並追加 "BeanInfo" 形成一個新類別,首先尋找 BeanInfo 類別。如果此操作失敗,則採用此名稱的最終類別名稱元件,在 BeanInfo 套件搜尋路徑中指定的每個包中搜尋該類別。

因此對於某個類別,比如說 "sun.xyz.OurButton",首先需要尋找稱為 "sun.xyz.OurButtonBeanInfo" 的 BeanInfo 類別,如果失敗,則尋找 BeanInfo 搜尋路徑中的每個包來搜尋 OurButtonBeanInfo 類別。對於預設搜尋路徑,這意味著將尋找 "sun.beans.infos.OurButtonBeanInfo"。

如果某個類別提供有關其自身的顯式 BeanInfo,則將它添加到從分析所有派生類別得到的 BeanInfo 資訊中,並將顯式資訊視為當前類別及其基礎類別的確定的資訊,無需進一步深入父級類別鏈進行分析。

如果沒有在某個類別上發現顯式 BeanInfo,則使用低層次的反射來研究類別的方法,並應用標準設計網要來標識屬性存儲器、事件源或公共方法。然後深入分析類別的父級類別,從它那裡(可能在父級類別鏈的頂部)添加資訊。

因為 Introspector 快取記憶體 BeanInfo 類別來獲得更好的性能,所以如果在使用多個類別載入器的應用程序中使用它,則需小心謹慎。通常,在破壞一個已用於 introspect 類別的 ClassLoader 時,應使用 Introspector.flushCachesIntrospector.flushFromCaches 方法從快取記憶體中清除所有內省的類別。

有關內省和設計網要的更多資訊,請參閱 JavaBeans specification


欄位摘要
static int IGNORE_ALL_BEANINFO
           
static int IGNORE_IMMEDIATE_BEANINFO
           
static int USE_ALL_BEANINFO
           
 
方法摘要
static String decapitalize(String name)
          獲得一個字元串並將它轉換成普通 Java 變數名稱大寫形式的實用工具方法。
static void flushCaches()
          刷新所有 Introspector 的內部快取記憶體。
static void flushFromCaches(Class<?> clz)
          刷新給定類別的 Introspector 的內部快取記憶體資訊。
static BeanInfo getBeanInfo(Class<?> beanClass)
          在 Java Bean 上進行內省,瞭解其所有屬性、公開的方法和事件。
static BeanInfo getBeanInfo(Class<?> beanClass, Class<?> stopClass)
          在給定的“斷”點之下,在 Java Bean 上進行內省,瞭解其所有屬性和公開的方法。
static BeanInfo getBeanInfo(Class<?> beanClass, int flags)
          在 Java Bean 上進行內省,瞭解其所有屬性、公開的方法和事件,並將結果用一些控制標記表示。
static String[] getBeanInfoSearchPath()
          獲得將用來尋找 BeanInfo 類別的套件名稱的列表。
static void setBeanInfoSearchPath(String[] path)
          更改將用來尋找 BeanInfo 類別的套件名稱的列表。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

USE_ALL_BEANINFO

public static final int USE_ALL_BEANINFO
另請參見:
常數欄位值

IGNORE_IMMEDIATE_BEANINFO

public static final int IGNORE_IMMEDIATE_BEANINFO
另請參見:
常數欄位值

IGNORE_ALL_BEANINFO

public static final int IGNORE_ALL_BEANINFO
另請參見:
常數欄位值
方法詳細資訊

getBeanInfo

public static BeanInfo getBeanInfo(Class<?> beanClass)
                            throws IntrospectionException
在 Java Bean 上進行內省,瞭解其所有屬性、公開的方法和事件。

如果 Java Bean 的 BeanInfo 類別以前已經被內省,則從 BeanInfo 快取記憶體中檢索 BeanInfo 類別。

參數:
beanClass - 將要分析的 bean 類別。
返回:
描述目標 bean 的 BeanInfo 物件。
拋出:
IntrospectionException - 如果在內省期間發生異常。
另請參見:
flushCaches(), flushFromCaches(java.lang.Class)

getBeanInfo

public static BeanInfo getBeanInfo(Class<?> beanClass,
                                   int flags)
                            throws IntrospectionException
在 Java Bean 上進行內省,瞭解其所有屬性、公開的方法和事件,並將結果用一些控制標記表示。

如果 Java Bean 的 BeanInfo 類別以前已經基於相同的參數被內省,則從 BeanInfo 快取記憶體中檢索 BeanInfo 類別。

參數:
beanClass - 將要分析的 bean 類別。
flags - 控制內省的標記。如果 flags == USE_ALL_BEANINFO,則使用可以發現的所有 BeanInfo 類別。如果 flags == IGNORE_IMMEDIATE_BEANINFO,則忽略與指定 beanClass 相關聯的任何 BeanInfo。如果 flags == IGNORE_ALL_BEANINFO,則忽略與指定 beanClass 相關聯的所有 BeanInfo 及其所有父類別。
返回:
描述目標 bean 的 BeanInfo 物件。
拋出:
IntrospectionException - 如果在內省期間發生異常。

getBeanInfo

public static BeanInfo getBeanInfo(Class<?> beanClass,
                                   Class<?> stopClass)
                            throws IntrospectionException
在給定的“斷”點之下,在 Java Bean 上進行內省,瞭解其所有屬性和公開的方法。

如果 Java Bean 的 BeanInfo 類別以前已經基於相同的參數被內省,則從 BeanInfo 快取記憶體中檢索 BeanInfo 類別。

參數:
beanClass - 將要分析的 bean 類別。
stopClass - 從其所在位置開始停止分析的基礎類別。stopClass 或其基礎類別中的所有方法/屬性/事件都將在分析中被忽略。
拋出:
IntrospectionException - 如果在內省期間發生異常。

decapitalize

public static String decapitalize(String name)
獲得一個字元串並將它轉換成普通 Java 變數名稱大寫形式的實用工具方法。這通常意味著將首字元從大寫轉換成小寫,但在(不平常的)特殊情況下,當有多個字元且第一個和第二個字元都是大寫字元時,不執行任何操作。

因此 "FooBah" 變成 "fooBah","X" 變成 "x",但 "URL" 仍然是 "URL"。

參數:
name - 要取消大寫化的字元串。
返回:
取消大寫化的字元串。

getBeanInfoSearchPath

public static String[] getBeanInfoSearchPath()
獲得將用來尋找 BeanInfo 類別的套件名稱的列表。

返回:
為了尋找 BeanInfo 類別而被搜尋的套件名稱陣列。此陣列的預設值與實作有關,例如 Sun 實作最初設置為 {"sun.beans.infos"}。

setBeanInfoSearchPath

public static void setBeanInfoSearchPath(String[] path)
更改將用來尋找 BeanInfo 類別的套件名稱的列表。如果參數 path 為 null,則此方法的行為是未定義的。

如果有安全管理器,則首先調用其 checkPropertiesAccess 方法。這可能會導致 SecurityException 異常。

參數:
path - 套件名稱陣列。
拋出:
SecurityException - 如果安全管理器存在並且其 checkPropertiesAccess 方法不允許設置系統屬性。
另請參見:
SecurityManager.checkPropertiesAccess()

flushCaches

public static void flushCaches()
刷新所有 Introspector 的內部快取記憶體。通常不需要此方法。通常只有高層級工具才需要使用此方法,這些工具需要在適當的位置更新現有的 "Class" 物件,並需要使 Introspector 重新分析現有的 Class 物件。


flushFromCaches

public static void flushFromCaches(Class<?> clz)
刷新給定類別的 Introspector 的內部快取記憶體資訊。通常不需要此方法。通常只有高層級工具才需要使用此方法,這些工具需要在適當的位置更新現有的 "Class" 物件,並需要使 Introspector 重新分析現有的 Class 物件。 注意,只刷新與目標 Class 物件有關聯的直接狀態。不需要刷新具有相同名稱的其他 Class 物件的狀態,也不需要刷新所有相關 Class 物件(比如子類別)的狀態,這些狀態甚至可能包括間接從目標 Class 物件中獲得的資訊。

參數:
clz - 要刷新的 Class 物件。
拋出:
NullPointerException - 如果 Class 物件為 null。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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