24

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

但是,我在使用它时遇到了一些限制@Named(尤其是依赖注入等)。我找不到解释差异的来源,如果有人能粗略概述何时使用一个或其他。

4

1 回答 1

43

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

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

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

有关注入如何在两种 bean 之间工作的更多信息,请参阅此相关问题。

请注意,bean 的范围也有所不同。它们来自不同的包,但名称相同(JSF: javax.faces.bean, CDI: javax.enterprise.context,因此如果包含错误的类,通常会导致错误和混乱。

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

编辑:CDI 支持 ViewScope,有关LINK的更多信息

于 2012-06-12T10:35:29.643 回答