2012-01-07 173 views
2

我正在閱讀JSF,並且有一個關於託管bean的問題。 「託管」只是指JSF實現實例化並管理其生命週期這一事實嗎?現在的新事物是使用CDI,它是處理實例化及其生命週期的不同實現?這是什麼意思管理?JSF中的託管bean

CDI是一個能夠實例化bean並在JSF之外管理它們的實現,這就是爲什麼它更好嗎?如果是這樣,以前JSF以外的選擇是什麼?每個容器或實現是否都有自己的管理bean的方式?而CDI是結合了這一點的東西?

+1

這裏有一個很好的答案,我認爲會幫助你 - http://stackoverflow.com/questions/2930889/are-managedbeans-obsolete-in-javaee6-because-of-named-in-cdi-weld。 – Perception 2012-01-07 17:17:00

+0

@Perception嗨,謝謝。它幾乎回答了我的問題,但仍有一個問題:如果'@ ManagedBean'是一個註釋,說實施需要處理它(並且這隻適用於支持視圖的bean),那麼你對bean做了什麼?在業務層?有沒有可能將這個責任留給EJB容器? – LuckyLuke 2012-01-07 20:19:54

回答

2

在JSF2註釋之前,在JSF1中,開發人員必須在faces-config.xml中註冊beans爲<managed-bean>。 JSF2中的支持仍然存在,但它變成了可選項,並且在某些情況下可能是唯一的方法,如果您要覆蓋在第三方JAR中打包的託管bean的註釋。

JSF和CDI不久,在plain JSP/Servlet,開發人員必須手動創建並通過顯式實例化他們,並明確

request.setAttribute("requestScopedBean", requestScopedBean); 
request.getSession().setAttribute("sessionScopedBean", sessionScopedBean); 
getServletContext().setAttribute("applicationScopedBean", applicationScopedBean); 

將它們放置在請求,會話或應用範圍管理豆本身(預檢查省略,如果bean不在範圍內,那麼這個bean當然只能放在範圍內,否則它會被重用)

請注意,上述內容正是JSF在「隱藏」下所做的。

然後發明了各種MVC框架,通過在XML文件中聲明bean或者通過註釋來抽象這些框架。每個MVC框架都有自己的Bean管理方式。然後是Spring,它試​​圖通過提供一個獨立於框架的方法來統一它。然後有Java EE 6 CDI將其標準化。

這一切都是獨立於容器的。它是特定於框架的。