動態語言視角下的 Java
嚴格定義上,Java 非動態語言(運行時不可改變程序結構/變量類型)。但 Java 擁有強大的 反射 機制:運行時加載未知類、探知結構、實例化對象、訪問字段、調用方法。這種「自我審視」能力稱為 內省。反射與內省是 Java 動態特性的雙基石。
JavaBean 本質:遵循規範的普通類
JavaBean 首先是一個 Class,再通過規範賦予組件特性:
- 屬性訪問:
getXxx()/setXxx() 命名與字段對應
- 事件註冊:
addXxxListener/removeXxxListener 標準模式
- 無參構造器:便於工具實例化
- 實現
Serializable:支援持久化傳輸
這些約定使工具(IDE、構建工具、框架)能通過反射/內省自動發現屬性、生成代碼、綁定數據,實現「組件化復用」。
內省與反射在 Bean 中的具體體現
| 機制 | 角色 | 典型應用 |
| 內省 | 類自我描述:屬性、事件、方法 | Introspector.getBeanInfo() 獲取屬性描述器,屬性編輯器、可視化構建器 |
| 反射 | 運行時操作對象:構造、字段、方法 | 框架依賴注入、ORM 映射、腳本引擎調用、動態代理 |
Bean 的 BeanInfo 類可顯式提供元數據,覆蓋默認內省結果,實現更精細控制。
設計模式視角:組件化與復用
Bean 規範本質是「設計模式」的標準化:統一命名、統一生命周期、統一事件模型。這使不同廠商的組件能在同一容器(如 JSP 標簽庫、可視化編輯器)中即插即用,正如 Delphi 控件生態。
Web 開發中,Bean 隔離了頁面設計師(JSTL/EL 表達式)與後端開發者(Java 邏輯),實現關注點分離。雖然普通類也可復用,但 Bean 規範提供了「契約」,降低協作成本。
總結
- JavaBean = Class + 命名規範 + 序列化 + 無參構造
- 內省靜態描述結構,反射動態操作實例
- 規範使工具鏈自動化成為可能,是組件化生態的基石
- 本質上無魔法,僅是約定優於配置的早期實踐
- 上一篇文章: Struts 實戰筆記:從登錄模塊到 AJAX 三級聯動與分頁泛型封裝
- 下一篇文章: Stripes 框架入門:約定優於配置,重塑 Java Web 開發體驗
Copyright ©
程式碼之家 All Rights Reserved