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

use*_*784 24 dependency-injection el jsf-2 tomcat7

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

然而,我遇到一些限制使用@Named一个(特别是依赖注入等)我找不到解释差异的来源,如果有人可以粗略概述何时使用一个或者其他.

Mat*_*ndy 41

@Named为CDI托管bean提供了一个EL名称,用于JSF或JSP等视图技术.请注意,在CDI应用程序,您没有需要的@Named注释,使通过CDI管理(感谢@Karl对他的评论)的bean.

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

  • 将它注入其他@ManagedBean带注释的bean(但不能注入@Named bean!)
  • 通过表达式语言从您的视图中访问它

有关两种豆类之间注射的详细信息,请参阅此相关问题.

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

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