| 維度 | JavaBean | Enterprise JavaBean (EJB) |
|---|---|---|
| 運行位置 | 客戶端/服務端均可,進程內 | 服務端容器中,遠程可訪問 |
| 可視性 | 通常可視(GUI 組件)或非可視數據載體 | 非可視商業邏輯組件 |
| 部署方式 | 獨立程序、Applet、ActiveX、JAR | EJB 容器,需部署描述符 |
| 核心契約 | 屬性、事件、方法(Introspection) | 遠程/本地接口、Home 接口、部署描述符 |
| 服務質量 | 無內建,自行實現 | 容器提供:事務、安全、並發、持久化、生命周期 |
| 遠程調用 | 不直接支持(需 RMI/WebService 封裝) | 原生支持 RMI-IIOP/CORBA |
getXxx()/setXxx() 命名約定(Boolean 類型可 isXxx())Serializable 支持持久化/傳輸工具可通過反射自動發現屬性/事件,實現可視化組裝(如 IDE 表單設計器)。
@TransactionAttribute)@RolesAllowed)@EJB/@Inject)// Web 層:JSF/Struts/Spring MVC Action 使用 JavaBean 作為表單後備對象
public class OrderForm {
private List cartItems; // JavaBean:可視、可序列化、綁定 UI
// getter/setter
}
// Service 層:EJB 實現業務邏輯
@Stateless
public class OrderService {
@EJB InventoryService inv;
@PersistenceContext EntityManager em;
@TransactionAttribute(REQUIRED)
public Order confirm(OrderForm form) {
// 1. 校驗庫存
// 2. 創建訂單實體
// 3. 扣減庫存
// 4. 發送確認郵件 (MDB)
return order;
}
}
Web 層 JavaBean 輕量承載表現層數據,EJB 專注事務性業務邏輯,兩者通過 DTO/VO 轉換解耦。
JavaBean 可通過 Beans.instantiate() + COM 橋接器部署為 ActiveX 控件,運行在 IE/Windows 客戶端。EJB 無法直接部署為 ActiveX(服務端組件),但可通過 Web 服務暴露給 ActiveX 客戶端調用。
@Component/@Service 替代 @Stateless@Transactional 替代容器事務JavaBean 概念泛化為「Plain Old Java Object (POJO)」,成為現代框架核心組件模型。