首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JavaBeans 開發完全指南:屬性、事件、客製化、持久化與部署

     編輯:Java 相關知識

前言

JavaBeans 是 Java 平台上可重用軟體元件的標準規範。本文系統整理 JavaBeans 核心規格:四大屬性類型、事件模型、客製化機制(Customizer、PropertyEditor、BeanInfo)、持久化與部署格式。

一、JavaBeans 四大屬性類型

(詳細解析請參考 JavaBean 四大屬性類型深度解析)

  • Simple:單一值,標準 getter/setter
  • Indexed:陣列/集合,支援索引存取
  • Bound:值變更發送 PropertyChangeEvent,元件聯動
  • Constrained:值變更前經 VetoableChangeListener 驗證,可否決

二、JavaBeans 事件模型

核心概念

  • 事件源:發生狀態變化的物件
  • 事件物件:封裝事件狀態,繼承 java.util.EventObject
  • 事件監聽器介面:定義處理方法,繼承 java.util.EventListener,命名以 Listener 結尾
  • 事件監聽器:實作監聽器介面的類別

標準命名模式

// 事件物件
public class MyEvent extends EventObject { ... }

// 監聽器介面
public interface MyListener extends EventListener {
    void myEventOccurred(MyEvent e);
}

// 事件源註冊/移除方法
public void addMyListener(MyListener l);
public void removeMyListener(MyListener l);

// 事件觸發(內部實作)
protected void fireMyEvent() {
    MyEvent e = new MyEvent(this);
    for (MyListener l : listeners) l.myEventOccurred(e);
}

事件適配器

當監聽器介面包含多個方法,但僅需實作其中幾個時,可提供預設空實作的適配器類別:


public class MyAdapter implements MyListener {
    public void method1(MyEvent e) {}
    public void method2(MyEvent e) {}
    public void method3(MyEvent e) {}
}

開發工具生成代碼時常使用匿名內部類別繼承適配器,僅覆寫關心的方法。

三、JavaBeans 客製化機制

1. Customizer(客製化器)

為複雜 Bean 提供專屬圖形化設定對話框,實作 java.beans.Customizer 介面:


public class MyBeanCustomizer extends Panel implements Customizer {
    private PropertyChangeSupport changes = new PropertyChangeSupport(this);
    
    // 必須實作:讓建構工具監聽屬性變更
    public void addPropertyChangeListener(PropertyChangeListener l) { ... }
    public void removePropertyChangeListener(PropertyChangeListener l) { ... }
    
    // 建構工具呼叫:設定被客製化的 Bean
    public void setObject(Object bean) { ... }
}

2. PropertyEditor(屬性編輯器)

為特定屬性提供自訂編輯方式(下拉選單、對話框、字串轉換),繼承 PropertyEditorSupport:


public class ColorEditor extends PropertyEditorSupport {
    public String[] getTags() { 
        return new String[] {"Red", "Green", "Blue"}; // 下拉選單選項
    }
    public String getAsText() { ... } // 屬性值 → 字串顯示
    public void setAsText(String s) { ... } // 字串 → 屬性值
    public Component getCustomEditor() { ... } // 回傳自訂編輯元件
    public boolean supportsCustomEditor() { return true; }
}

3. BeanInfo(元件資訊)

集中描述 Bean 的屬性、方法、事件、圖示等中繼資料,繼承 SimpleBeanInfo:


public class MyBeanInfo extends SimpleBeanInfo {
    public PropertyDescriptor[] getPropertyDescriptors() {
        try {
            PropertyDescriptor pd = new PropertyDescriptor("color", MyBean.class);
            pd.setPropertyEditorClass(ColorEditor.class); // 指定編輯器
            return new PropertyDescriptor[] { pd };
        } catch (Exception e) { return null; }
    }
    
    public Image getIcon(int iconKind) { ... } // 提供 16x16/32x32 圖示
}

四、JavaBeans 持久化

標準序列化

  • 實作 java.io.Serializable
  • 所有非 transient、非 static 欄位自動序列化
  • 工具將客製化後的 Bean 狀態儲存為 .ser 或包含在 .jar 中

版本演進原則

長期持久化建議

標準 Java 序列化脆弱、不跨語言。長期儲存建議使用:

  • XMLEncoder/XMLDecoder (java.beans 套件,輸出 XML 格式)
  • JSON (Jackson/Gson)
  • 資料庫 ORM (JPA/Hibernate)

五、部署格式:JAR 與 Manifest

JavaBeans 通常打包為 .jar 檔案,Manifest.mf 標示哪些類別是 Bean:


Name: MyBean.class
Java-Bean: True

Name: MyBeanEditor.class
Java-Bean: False

Name: MyBeanInfo.class
Java-Bean: False

打包指令:jar cvfm MyBean.jar Manifest.mf *.class

結語

JavaBeans 規範雖歷經歲月,但其核心設計——「命名慣例驅動工具識別」、「事件模型實現元件通訊」、「中繼資料分離(BeanInfo)」、「標準化持久化」——深深影響了後續所有 Java 元件模型(EJB、Spring Bean、JSF、CDI)。掌握 JavaBeans 基礎,是精通 Java 生態系架構設計的必修課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
變更類型是否相容說明
新增欄位✅ 相容舊資料反序列化時新欄位為預設值
移除欄位❌ 不相容導致 serialVersionUID 不符
修改欄位型別❌ 不相容型別不匹配拋出例外
改變欄位存取修飾詞✅ 相容不影響序列化格式
欄位改為 transient/static❌ 不相容資料遺失