这可能是一个菜鸟问题,但是在很多教程和示例中,我看到这些注释被使用,就好像它们做同样的事情一样。
但是,我在使用它时遇到了一些限制@Named
(尤其是依赖注入等)。我找不到解释差异的来源,如果有人能粗略概述何时使用一个或其他。
这可能是一个菜鸟问题,但是在很多教程和示例中,我看到这些注释被使用,就好像它们做同样的事情一样。
但是,我在使用它时遇到了一些限制@Named
(尤其是依赖注入等)。我找不到解释差异的来源,如果有人能粗略概述何时使用一个或其他。
@Named
为 CDI 托管 bean 提供一个 EL 名称,以便在 JSF 或 JSP 等视图技术中使用。请注意,在 CDI 应用程序中,您不需要注释来制作由 CDI 管理的@Named
bean(感谢 @Karl 的评论)。
@ManagedBean
使 bean 由 JSF 管理,您可以:
有关注入如何在两种 bean 之间工作的更多信息,请参阅此相关问题。
请注意,bean 的范围也有所不同。它们来自不同的包,但名称相同(JSF: javax.faces.bean
, CDI: javax.enterprise.context
,因此如果包含错误的类,通常会导致错误和混乱。
根据我的经验:您应该尽可能使用 CDI bean,因为它们比 JSF 托管 bean 更灵活。唯一的缺点是 CDI 不知道视图范围,因此您需要退回到 @ManagedBean 或使用诸如 Seam 之类的第三方扩展。
编辑:CDI 支持 ViewScope,有关LINK的更多信息