|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.beans.Introspector
public class Introspector
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.flushCaches
方法從快取記憶體中清除所有內省的類別。
Introspector.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 |
欄位詳細資訊 |
---|
public static final int USE_ALL_BEANINFO
public static final int IGNORE_IMMEDIATE_BEANINFO
public static final int IGNORE_ALL_BEANINFO
方法詳細資訊 |
---|
public static BeanInfo getBeanInfo(Class<?> beanClass) throws IntrospectionException
如果 Java Bean 的 BeanInfo 類別以前已經被內省,則從 BeanInfo 快取記憶體中檢索 BeanInfo 類別。
beanClass
- 將要分析的 bean 類別。
IntrospectionException
- 如果在內省期間發生異常。flushCaches()
,
flushFromCaches(java.lang.Class>)
public static BeanInfo getBeanInfo(Class<?> beanClass, int flags) throws IntrospectionException
如果 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 及其所有父類別。
IntrospectionException
- 如果在內省期間發生異常。public static BeanInfo getBeanInfo(Class<?> beanClass, Class<?> stopClass) throws IntrospectionException
如果 Java Bean 的 BeanInfo 類別以前已經基於相同的參數被內省,則從 BeanInfo 快取記憶體中檢索 BeanInfo 類別。
beanClass
- 將要分析的 bean 類別。stopClass
- 從其所在位置開始停止分析的基礎類別。stopClass 或其基礎類別中的所有方法/屬性/事件都將在分析中被忽略。
IntrospectionException
- 如果在內省期間發生異常。public static String decapitalize(String name)
因此 "FooBah" 變成 "fooBah","X" 變成 "x",但 "URL" 仍然是 "URL"。
name
- 要取消大寫化的字元串。
public static String[] getBeanInfoSearchPath()
public static void setBeanInfoSearchPath(String[] path)
如果有安全管理器,則首先調用其 checkPropertiesAccess
方法。這可能會導致 SecurityException 異常。
path
- 套件名稱陣列。
SecurityException
- 如果安全管理器存在並且其 checkPropertiesAccess
方法不允許設置系統屬性。SecurityManager.checkPropertiesAccess()
public static void flushCaches()
public static void flushFromCaches(Class<?> clz)
clz
- 要刷新的 Class 物件。
NullPointerException
- 如果 Class 物件為 null。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。