SeamFramework.orgCommunity Documentation
Web Beans(JSR-299)規格為 Java EE 環境定義了一組簡化應用程式開發的服務。Web Bean 針對於現有的 Java 元件類型(包含 JavaBeans 以及 Enterprise Java Beans)提供了增強的生命週期與互動模型(interaction model)。為了補充傳統的 Java EE 程式撰寫模型(Programming Model),Web Bean 服務提供了:
狀態元件上的生命週期改善,並綁定至明確定義的 contexts、
一個用來進行 dependency injection(依賴注入)的 typesafe(類型安全列舉)方式、
透過 event notification(事件通知)功能來進行的互動,以及
一個將 interceptors(攔截器)綁定至元件的較佳方式,以及一個稱為 decorator(裝飾器)的新型攔截器,它適用於解決商業上的相關問題。
依賴注入和 contextual 生命週期管理這兩者組合起來可讓一個不熟悉的 API 的用戶無須過問下列問題:
這個物件的生命週期為何?
它一次能同時有幾個客戶端?
它是否為多執行緒(multithread)?
我能從哪裡取得呢?
我是否需要明確地將它毀掉呢?
當我沒有在直接使用它時,我應該將它的參照保留在哪裡呢?
我該如何新增一個 indirection layer 來使這個物件在建置時的實做可呈多樣化?
我該如何在其它物件之間共享這個物件?
Web Bean 只會指定它所依賴的 Web Bean 的類型和語意。它無須知道實際的生命週期、具體的實做、執行緒模型,或是任何它所依賴的 Web Bean 的其它客戶端。更好的是,它所依賴的 Web Bean 的具體實做、生命週期和執行緒模型可根據建置的情況來改變,並且不影響到任何的客戶端。
事件、攔截器以及裝飾器可增強在此模型中所繼承的 loose-coupling(鬆散結合性):
event notifications(事件通知)會 decouple producer 和 event consumer(事件用戶),
interceptors(攔截器)可由商業邏輯去 decouple 技術問題,並且
decorators(裝飾器)可將商業問題分為若干部分。
最重要的是,Web Bean 以一種 typesafe 的方式來提供了所有的這些功能。Web Bean 從不使用基於字串的識別符號(identifier)來斷定共同協作的物件如何相輔相成。雖然 XML 也是選項之一不過卻很少被使用到。取而代之,Web Bean 使用了 Java 物件模型中可使用的 typing 資訊並統合了一個稱為 binding annotations(綁定標記)的新格式,它可將 Web Bean、它們的相依性、它們的攔截器和裝飾器以及它們的事件用戶聯繫在一起。
Web Bean 服務為通用的並且適用於下列位於 Java EE 環境中的元件類型:
所有 JavaBean、
所有 EJB,以及
所有 Servlet。
Web Bean 甚至提供了必要的整合點來讓未來 Java EE 規格或是非標準架構所定義的其它類型元件能夠利落地與 Web Bean 整合、有效利用 Web Bean 服務,並與任何其它類型的 Web Bean 進行互動。
Web Bean 受到了幾個現有的 Java framework(包括 Seam、Guice 以及 Spring)的影響。不過,Web Bean 擁有它自己獨特的特性:比 Seam 還要完善的 typesafe、比 Spring 更 stateful 而沒有那麼地以 XML 為中心,並且針對於網站和企業級的應用程式上的處理能力比 Guice 完善。
最重要的是,Web Bean 是一個能與 Java EE 以及可使用崁入式的 EJB Lite 的任何 Java SE 環境整合的 JCP 標準。
內容目錄