2012-06-12 73 views
23

這可能是一個菜鳥問題,但是在很多教程和示例中,我看到這些註釋被用作好像他們做了同樣的事情。JSF2.0中的@Named和@ManagedBean註釋之間的區別Tomcat7

但是我跑進使用一些侷限性@Named一個(尤其是依賴注入等)我找不到其中的差別解釋的來源,我會非常感激,如果有人可以給當一個粗略概述使用一個或另一個。

+1

什麼樣的限制? @ @ ManagedBean是'@ Named'的函數的一個子集,所以'@ Named'應該可以在任何地方工作 –

回答

36

@Named給CDI託管bean一個EL名稱,用於視圖技術如JSF或JSP。請注意,在CDI應用程序中,不需要需要使用@Named註釋來製作由CDI管理的bean(感謝@Karl的評論)。

@ManagedBean使得由JSF管理bean的,您可以:

  • 其注入其他@ManagedBean註解的bean通過表達式語言
  • 從你的觀點
  • 訪問它(但不進@Named豆!)

看到這個related question欲瞭解更多信息如何注入這兩種豆類之間的作品。

請注意,這些bean的範圍也有所不同。它們來自不同的軟件包,但名稱完全相同(JSF:javax.faces.bean,CDI:javax.enterprise.context,所以如果包含錯誤的類別,它通常是錯誤和混淆的來源。因爲它們比JSF管理的bean更加靈活,唯一的缺點是CDI不知道視圖範圍,因此您需要回退到@ManagedBean或使用一些第三方擴展(如Seam)

+1

+1。@matt:我認爲'RequestScoped + KeepAlive = ViewScoped'可以和@命名我是否正確? – Addicted

+0

@Abhinav:KeepAlive從像Richfaces這樣的組件庫? –

+0

非常感謝您的解釋! – user871784

相關問題