JavaBean 本質上就是一個 Java 類別,但遵循特定規範(命名慣例、序列化、無參建構子),使其具備「可被工具識別、組裝、重用」的元件特性。兩者關係可概括為:所有 JavaBean 都是 Class,但並非所有 Class 都是 JavaBean。
Java 在執行時期檢查類別結構、動態載入類別、建立實例、存取欄位、呼叫方法的能力。核心 API:java.lang.reflect.*、Class.forName()、Class.newInstance()。
專門針對 JavaBean 的反射應用。java.beans.Introspector 分析類別的 getter/setter 方法、事件監聽器介面,自動推導屬性、事件、方法資訊。開發工具(如 NetBeans Matisse、JBuilder)即透過內省在設計時期顯示 Bean 的屬性視窗、事件頁籤。
嚴格定義上,Java 不是動態語言(執行時無法改變類別結構)。但反射機制賦予 Java 「準動態」能力:
| 規範項目 | 說明 | 目的 |
|---|---|---|
| 公開類別 | public class | 可被外部工具載入 |
| 無參建構子 | public BeanName() | 工具自動實例化 |
| 實作 Serializable | implements Serializable | 支援持久化、網路傳輸 |
| 私有欄位 + 存取器 | private + getter/setter | 封裝性、工具識別屬性 |
| 命名慣例 | getX/setX, isX/setX (boolean) | 內省機制自動推導屬性名 |
| 事件模式 | addXListener/removeXListener | 工具識別事件來源 |
IDE 透過內省自動產生屬性編輯器、事件綁定 UI,開發者可拖拉元件、設定屬性、連接事件,無需手寫大量樣板代碼。
JSP 搭配 <jsp:useBean>、<jsp:setProperty>,頁面設計師無需撰寫 Java 代碼即可操作資料,實現「表現邏輯與業務邏輯分離」。
Spring Bean、EJB、JSF Managed Bean、CDI Bean 皆繼承或參考 JavaBean 規範,使生態系元件可相互整合。
「JavaBean 重用性比普通類別高」——不一定。重用性取決於設計品質(高內聚、低耦合、介面導向),而非是否遵循 Bean 規範。Bean 規範主要解決「工具可識別、標準化組裝」問題。
當預設內省行為不足時,可提供:
BeanInfo 類別:自訂屬性描述、隱藏屬性、指定自訂編輯器PropertyEditor:複雜屬性型別(如 Color、Date、自訂型別)的字串雙向轉換與視覺化編輯JavaBean 是 Java 平台上「元件化」的基石協定。它不引入新語法,僅以命名慣例與介面規範,賦予普通類別被工具識別、視覺化組裝、標準化持久化的能力。理解內省與反射的運作原理,有助於深入掌握 Spring、Hibernate 等主流框架的核心運作機制。