概念: JavaBean
這個準則提供 JavaBeans 的概觀,這是一套簡單又強大的 Java 元件模型。
關係
相關元素
主要說明

簡介

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 方法來定義內容。

顯示 Customer 內容的 UML 圖型。

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 實作 SerializableExternalizable 介面而定。JDK 1.4 引進 XMLEncoderXMLDecoder 類別,支援以 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