Managed Bean,又稱托管Bean,是JSF框架中由框架負(fù)責(zé)管理其生命周期的一種[JavaBean]。Managed Bean是JSF中[依賴注入]功能的主要對象,它的創(chuàng)建、初始化、銷毀等生命周期行為都由框架負(fù)責(zé)完成。用戶通常通過[EL表達(dá)式]或在[部署描述文件]中定義依賴注入規(guī)則來獲得對Managed Bean的引用(而不是自己去new一個Managed Bean的實例)。
通常,JSF框架使用惰性策略來創(chuàng)建和初始化Managed Bean。這意味著,一個定義在某特定[有效域]的Managed Bean,并不是在這個[有效域]創(chuàng)建時同時被創(chuàng)建,而是在實際需要引用它的時候才被創(chuàng)建。
在AOM中,Managed Bean被稱為Lite Bean。從AOM 2.0開始,對Managed Bean 做了大量的擴(kuò)充,最終演化成了目前的LiteBean。LiteBean 是 AOM 中非常重要的一個概念,它即是展現(xiàn)層與業(yè)務(wù)層之間的粘接器,同時也是 AOM 與其它成熟編程模型的粘接器,如 Spring、EJB 3 等。
Backing Bean是Managed Bean在JSF框架中扮演的角色之一。這個角色的職責(zé)是在服務(wù)器端邏輯中代表特定的頁面和它之上的組件,作為頁面行為邏輯的容器(或稱控制器)。通常Backing Bean會放在[Request Scope]中,但并不強(qiáng)制如此。在AOM目前版本中(2.2M1),如果頁面中存在一些大型交互式組件(例如<w:tree>或<w:datagrid>),則持有這些組件實例的Backing Bean必須在[Session Scope]中。
值得注意的是,在JSF編程模型中,并不是所有Managed Bean都作為Backing Bean而存在的。視用戶的分層粒度而定,Managed Bean可以分為只包含業(yè)務(wù)邏輯(非Backing Bean),或只包含頁面行為邏輯(充當(dāng)控制器的Backing Bean),或包含了一定業(yè)務(wù)邏輯邏輯的Backing Bean(當(dāng)用戶不明確區(qū)分模型邏輯和UI控制邏輯時)。換而言之,對應(yīng)到[MVC]架構(gòu),在JSF中,M(模型)與C(控制器)的角色都由Managed Bean充當(dāng),其中,充當(dāng)C(控制器)的Managed Bean就是Backing Bean。
(參考:區(qū)別JSF中不同種類的Managed-Bean)
標(biāo)準(zhǔn)JSF中并不存在Managed Bean與頁面對應(yīng)關(guān)系的概念,這是因為標(biāo)準(zhǔn)JSF完全通過在頁面中使用[EL表達(dá)式]的方式來進(jìn)行頁面與Managed Bean的綁定。每一條EL表達(dá)式都明確指定了所引用的Managed Bean。
但在AOM中,由于存在[IoVC]特性,需要指定與頁面對應(yīng)的Managed Bean。這可以通過以下任意一種方式來實現(xiàn):