我正在閱讀JSF,並且有一個關於託管bean的問題。 「託管」只是指JSF實現實例化並管理其生命週期這一事實嗎?現在的新事物是使用CDI,它是處理實例化及其生命週期的不同實現?這是什麼意思管理?JSF中的託管bean
CDI是一個能夠實例化bean並在JSF之外管理它們的實現,這就是爲什麼它更好嗎?如果是這樣,以前JSF以外的選擇是什麼?每個容器或實現是否都有自己的管理bean的方式?而CDI是結合了這一點的東西?
我正在閱讀JSF,並且有一個關於託管bean的問題。 「託管」只是指JSF實現實例化並管理其生命週期這一事實嗎?現在的新事物是使用CDI,它是處理實例化及其生命週期的不同實現?這是什麼意思管理?JSF中的託管bean
CDI是一個能夠實例化bean並在JSF之外管理它們的實現,這就是爲什麼它更好嗎?如果是這樣,以前JSF以外的選擇是什麼?每個容器或實現是否都有自己的管理bean的方式?而CDI是結合了這一點的東西?
在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將其標準化。
這一切都是獨立於容器的。它是特定於框架的。
這裏有一個很好的答案,我認爲會幫助你 - http://stackoverflow.com/questions/2930889/are-managedbeans-obsolete-in-javaee6-because-of-named-in-cdi-weld。 – Perception 2012-01-07 17:17:00
@Perception嗨,謝謝。它幾乎回答了我的問題,但仍有一個問題:如果'@ ManagedBean'是一個註釋,說實施需要處理它(並且這隻適用於支持視圖的bean),那麼你對bean做了什麼?在業務層?有沒有可能將這個責任留給EJB容器? – LuckyLuke 2012-01-07 20:19:54