Diferencia entre @Named y @ManagedBean anotaciones en JSF2.0 Tomcat7

Esta podría ser una pregunta novato, sin embargo, en muchos tutoriales y ejemplos vi que estas anotaciones se usaban como si hicieran lo mismo.

Sin embargo, encontré algunas limitaciones al usar @Named (especialmente con dependency injection, etc.). No pude encontrar una fuente donde se explicara la diferencia, y estaría muy agradecido si alguien puede dar una visión general aproximada sobre cuándo usar uno. o el otro

@Named le da a un frijol manejado CDI un nombre EL para ser utilizado en tecnologías de visualización como JSF o JSP. Tenga en cuenta que en una aplicación CDI no necesita la anotación @Named para hacer un bean administrado por CDI (gracias a @Karl por su comentario).

@ManagedBean hace que Bean sea administrado por JSF y usted puede:

  • ¡Inyectarlo en otros beans comentados @ManagedBean (pero no en beans @Named!)
  • acceda desde sus puntos de vista a través del lenguaje de expresión

Consulte esta pregunta relacionada para obtener más información sobre cómo funciona la inyección entre ambos tipos de frijoles.

Tenga en cuenta que también hay una diferencia con el scope de los beans. Vienen de diferentes paquetes pero se nombran de manera idéntica (JSF: javax.faces.bean , CDI: javax.enterprise.context , por lo que a menudo es una fuente de error y confusión si se incluye la clase incorrecta.

Según mi experiencia: debe usar beans CDI siempre que sea posible, ya que son más flexibles que los beans gestionados por JSF. El único inconveniente es que CDI no conoce un scope de vista, por lo que debe recurrir a @ManagedBean o utilizar alguna extensión de terceros como Seam.