这可能是一个noob问题,但是在很多教程和示例中,我看到这些注释被用作好像他们做同样的事情。
然而,我使用@Named
问题遇到了一些限制(特别是依赖注入等)我无法找到解释差异的来源,如果有人,我会非常感激可以粗略地概述何时使用其中一个。
答案 0 :(得分:39)
@Named
为CDI托管bean提供了一个EL名称,用于JSF或JSP等视图技术。请注意,在CDI应用程序中,不需要@Named
注释来制作由CDI管理的bean(感谢@Karl的评论)。
@ManagedBean
使得bean由JSF管理,您可以:
有关注入如何在两种bean之间起作用的详细信息,请参阅此related question。
请注意,bean的范围也存在差异。它们来自不同的包,但命名相同(JSF:javax.faces.bean
,CDI:javax.enterprise.context
,因此如果包含错误的类,它通常是错误和混淆的来源。
根据我的经验:您应该尽可能使用CDI bean,因为它们比JSF托管bean更灵活。唯一的缺点是CDI不知道视图范围,因此您需要回退到@ManagedBean或使用像Seam这样的第三方扩展。