簡介
JavaBeans 定義一套簡單又強大的 Java 元件模型。JavaBeans 的目標是支援獨立自足又可重複使用的單元,供開發人員以程式化的方式或在建置器工具中以視覺化方式操作。
JavaBeans 可能是 GUI 控制項或沒有視覺呈現。Java 中的 GUI 控制項通常是 JavaBeans,有利於以建置器工具來操作。在 J2EE 中,通常在 JSP 使用簡單的 JavaBeans,將 HTML 的呈現和
Java 程式碼分開,而 Java 程式碼則包含在 JavaBeans 中。
JavaBean 是具有三個不同特性的 Java 類別:
JavaBean 內容
JavaBean 的內容可供其他元件存取。內容通常是私密值,可透過設定元和取得元方法來存取,但也可能是計算值。更新內容可能產生各種負面影響。
存取元是存取內容的方法。存取元可以是取得元和設定元,且遵循命名慣例:
void setPropertyName(PropertyType value); // 設定元
PropertyType getPropertyName() // 取得元
若為 Boolean 內容,取得元可能是:
boolean isPropertyName() // Boolean 內容的取得元
範例:Customer Bean
下列是一個簡單的 JavaBean (Customer) 範例,有兩個簡單的內容:name 和 email。請注意如何透過成對的 set/get 方法來定義內容。
public class Customer {
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String aName) {
name = aName;
}
public String getEmail() {
return email;
}
public void setEmail(String aEmail) {
email = aEmail;
}
}
JSP 中經常使用這類簡單的 JavaBeans,可以傳輸網頁表單中的值。
索引內容
除了簡單內容,只有單一值,內容也可以是一組放在陣列中的值。
索引內容可以傳回指定索引上的值,或整個陣列的值。
索引內容有下列簽章:
void setPropertyName(int index, PropertyType value); // 索引設定元
PropertyType getter(int index); // 索引取得元
void setPropertyName(PropertyType values[]); // 陣列設定元
PropertyType[]getPropertyName(); // 陣列取得元
界限內容
界限內容機制支援內容變更時的通知服務。有興趣獲悉變更的物件事先登錄自己,當內容變更時,就會通知已登錄的物件。通常是由具有界限女內容的元件(在設定內容之後)激發事件來完成此通知。
具有界限內容的 JavaBean 會公開方法給有興趣的物件登錄和取消登錄,這些方法稱為接聽器。開發人員可以定義自己的通知機制,不過 Java 程式庫在 java.beans 套件中已提供許多常用的支援類別。
限制內容
限制內容類似界限內容,但會在實際設定內容之前發生通知。這樣可讓有興趣的物件擲出 PropertyVetoException 來禁止變更內容。
事件與通知
事件是 JavaBeans 的特性,可讓獨立開發的元件傳達狀態變更的相關資訊來彼此溝通。在此模型中,有些元件會激發事件,由扮演事件接聽器角色的其他元件處理。
為了支援通訊模型,JavaBeans 元件模型提供:
-
可激發事件的內容(界限和限制內容)
-
登錄方法,供接聽器登錄自己
-
事件,傳送變更的相關資訊
-
接聽器,對傳遞的事件做出反應
下列類別圖以 JavaBean EventSource 和簡單的 int 內容來闡述這些概念。
在配置期間,具體的接聽器會向 JavaBean 登錄。稍後,其他一些物件會呼叫 setProperty 方法,此方法將建立事件物件來啟動通知程序。EventSource JavaBean 會在所有已登錄的接聽器上呼叫
propertyChange 方法。事件接聽器將接收事件、讀取其中的值,並對事件做出反應。
下列序列圖顯示呼叫的順序:
接聽器的通知和 JavaBean 實例同步進行,JavaBean 實例為事件的來源,但事件接聽器可以在另一個執行緒中處理事件。
內部檢查
內部檢查是一項執行時期機制,可以偵測 JavaBean 的內容、事件及方法。內部檢查適用於不強硬依賴其他元件的開發工具和程式。內部檢查是透過反映和一套方法和介面命名慣例來達成。BeanInfo
類別支援內部檢查的其他特性。內部檢查使用的 JavaBeans 命名慣例有時稱為「設計型樣」,但請勿與物件導向設計的設計型樣觀念混淆。
持續性
JavaBean 可透過序列化機制來保存。序列化可以是自動或自訂,取決於 JavaBean 實作 Serializable 或 Externalizable 介面而定。JDK 1.4 引進
XMLEncoder 和 XMLDecoder 類別,支援以 XML 格式儲存 JavaBeans 實例。
自訂
JavaBean 的外觀和行為可以在設計時自訂。這對於圖形使用者介面中使用的視覺化 JavaBeans 而言特別重要。自訂作業可以透過內容編輯器或以自訂程式來完成。自訂程式提供自訂的使用者介面,可在設計時配置 JavaBean 實例。
BeanContext
BeanContext 定義一個邏輯包含階層,方便 JavaBeans 詢問環境的功能和服務。BeanContext 機制支援 JavaBeans 的邏輯包含階層及查閱 JavaBeans 在階層中提供的服務。
JavaBeans™ Activation Framework
Java Activation Framework 是標準的 Java 延伸,可以判斷一段資料的類型、封裝、探查可用的操作,以及根據資料片段上需要的操作來實例化軟體元件。
詳細資訊
如需 JavaBeans 的相關資訊,請參閱 http://java.sun.com/ 的 JavaBeans API
Specification, Version 1.01。請循著鏈結瀏覽至 Docs & Training > Java 2 Platform, Standard Edition > Java 2 SDK, SE
v1.3 documentation > JavaBeans > JavaBeans Specification。
|