Utilice CDI.
Según JSF 2.3, @ManagedBeanestá en desuso . Consulte también el número de especificaciones 1417 . Esto significa que no hay más de una razón para elegir @ManagedBeanmás @Named. Esto se implementó por primera vez en Mojarra 2.3.0 versión beta m06.

Historia
La diferencia principal es que @ManagedBeanestá administrado por el marco JSF y solo está @ManagedPropertydisponible para otros beans administrados por JSF. @Namedes administrado por el servidor de aplicaciones (el contenedor) a través de marco CDI y está vía @Injectdisponible para cualquier tipo de artefacto gestionadas por contenedor como @WebListener, @WebFilter, @WebServlet, @Path, @Stateless, etc, e incluso una JSF @ManagedBean. Desde el otro lado en, @ManagedPropertyno no trabajar dentro de una@Named o de cualquier otro artefacto logrado contenedor. Funciona realmente solo por dentro@ManagedBean .
Otra diferencia es que CDI en realidad inyecta proxies que se delegan en la instancia actual en el alcance de destino por solicitud / hilo (como en la forma en que se inyectan los EJB). Este mecanismo permite inyectar un bean de alcance más estrecho en un bean de alcance más amplio, lo que no es posible con JSF @ManagedProperty. JSF "inyecta" aquí la instancia física directamente al invocar a un establecedor (esa es exactamente la razón por la que se requiere un establecedor, mientras que no se requiere con@Inject ).
Si bien no es directamente una desventaja, hay otras formas, el alcance @ManagedBeanes simplemente limitado. Desde la otra perspectiva, si no desea exponer "demasiado" @Inject, también puede mantener sus beans administrados @ManagedBean. Es como protectedversuspublic . Pero eso realmente no cuenta.
Al menos, en JSF 2.0 / 2.1, la principal desventaja de administrar beans de respaldo JSF por CDI es que no hay un equivalente CDI de @ViewScoped. Se @ConversationScopedacerca, pero aún requiere iniciar y detener manualmente y agrega un cidparámetro de solicitud feo a las URL de resultado. MyFaces CODI lo hace más fácil al unir de forma totalmente transparente JSF javax.faces.bean.ViewScopeda CDI para que pueda hacerlo @Named @ViewScoped, sin embargo, eso agrega un windowIdparámetro de solicitud feo a las URL de resultados, también en la navegación simple de página a página. OmniFaces resuelve todo esto con un verdadero CDI @ViewScopedque realmente vincula el alcance del bean al estado de la vista JSF en lugar de a un parámetro de solicitud arbitrario.
JSF 2.2 (que se publica 3 años después de esta pregunta / respuesta) ofrece una nueva @ViewScopedanotación totalmente compatible con CDI lista para usar en formato javax.faces.view.ViewScoped. JSF 2.2 incluso viene con un CDI solo @FlowScopedque no tiene @ManagedBeanequivalente, lo que empuja a los usuarios de JSF hacia CDI. La expectativa es que @ManagedBeany los amigos quedarán obsoletos según Java EE 8. Si todavía lo está utilizando @ManagedBean, se recomienda encarecidamente que cambie a CDI para estar preparado para futuras rutas de actualización. CDI está disponible en contenedores compatibles con Java EE Web Profile, como WildFly, TomEE y GlassFish. Para Tomcat, debe instalarlo por separado, exactamente como ya lo hizo para JSF. Consulte también ¿Cómo instalar CDI en Tomcat?