JSF2.0 Tomcat7中的@Named和@ManagedBean注释之间的区别

时间:2012-06-12 09:48:27

标签: jsf-2 dependency-injection el tomcat7

这可能是一个noob问题,但是在很多教程和示例中,我看到这些注释被用作好像他们做同样的事情。

然而,我使用@Named问题遇到了一些限制(特别是依赖注入等)我无法找到解释差异的来源,如果有人,我会非常感激可以粗略地概述何时使用其中一个。

1 个答案:

答案 0 :(得分:39)

@Named为CDI托管bean提供了一个EL名称,用于JSF或JSP等视图技术。请注意,在CDI应用程序中,需要@Named注释来制作由CDI管理的bean(感谢@Karl的评论)。

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

  • 将其注入其他@ManagedBean注释bean(但不会注入@Named beans!)
  • 通过表达式语言
  • 从您的观点中访问它

有关注入如何在两种bean之间起作用的详细信息,请参阅此related question

请注意,bean的范围也存在差异。它们来自不同的包,但命名相同(JSF:javax.faces.bean,CDI:javax.enterprise.context,因此如果包含错误的类,它通常是错误和混淆的来源。

根据我的经验:您应该尽可能使用CDI bean,因为它们比JSF托管bean更灵活。唯一的缺点是CDI不知道视图范围,因此您需要回退到@ManagedBean或使用像Seam这样的第三方扩展。