Use CDI.
De acordo com o JSF 2.3, @ManagedBeanestá obsoleto . Consulte também o problema de especificação 1417 . Isto significa que não há mais uma razão para escolher @ManagedBeanmais @Named. Isso foi implementado pela primeira vez no Mojarra 2.3.0 beta versão m06.

História
A principal diferença é que @ManagedBeané gerenciado pelo framework JSF e está @ManagedPropertydisponível apenas para outros beans gerenciados JSF. @Namedé gerido pelo servidor de aplicativos (o recipiente) via quadro CDI e é via @Injectdisponível para qualquer tipo de recipiente artefato gerido como @WebListener, @WebFilter, @WebServlet, @Path, @Stateless, etc e até mesmo um JSF @ManagedBean. Do outro lado, @ManagedPropertyse não trabalhar dentro de uma @Namedou qualquer outro recipiente artefato gerenciado. Funciona realmente apenas por dentro @ManagedBean.
Outra diferença é que o CDI realmente injeta proxies que delegam à instância atual no escopo de destino por solicitação / thread (por exemplo, como os EJBs são injetados). Esse mecanismo permite injetar um bean de escopo mais restrito em um bean de escopo mais amplo, o que não é possível com JSF @ManagedProperty. O JSF "injeta" aqui a instância física diretamente chamando um setter (é exatamente por isso que um setter é necessário, embora não seja necessário com @Inject).
Embora não seja uma desvantagem direta - existem outras maneiras - o escopo do @ManagedBeané simplesmente limitado. Da outra perspectiva, se você não quiser expor "demais" para @Inject, também pode apenas manter seus beans gerenciados @ManagedBean. É como protectedversus public. Mas isso realmente não conta.
Pelo menos, no JSF 2.0 / 2.1, a principal desvantagem de gerenciar beans de apoio JSF por CDI é que não há equivalente de CDI @ViewScoped. O @ConversationScopedchega perto, mas ainda requer iniciar e parar manualmente e anexar um cidparâmetro de solicitação feio aos URLs resultantes. MyFaces CODI torna isso mais fácil, conectando JSFs javax.faces.bean.ViewScopeda CDI de forma totalmente transparente, de modo que você possa simplesmente fazer @Named @ViewScoped, no entanto, isso anexa um windowIdparâmetro de solicitação feio a URLs resultantes, também na navegação simples de página a página. OmniFaces resolve tudo isso com um verdadeiro CDI @ViewScopedque realmente vincula o escopo do bean ao estado de exibição JSF em vez de a um parâmetro de solicitação arbitrário.
JSF 2.2 (que é lançado 3 anos após esta pergunta / resposta) oferece uma nova @ViewScopedanotação totalmente compatível com CDI fora da caixa no sabor de javax.faces.view.ViewScoped. O JSF 2.2 vem com um CDI apenas @FlowScopedque não tem um @ManagedBeanequivalente, empurrando os usuários do JSF para o CDI. A expectativa é que @ManagedBeane amigos sejam descontinuados de acordo com o Java EE 8. Se você ainda estiver usando @ManagedBean, é altamente recomendável mudar para o CDI para estar preparado para caminhos de atualização futuros. O CDI está disponível em containers compatíveis com o Java EE Web Profile, como WildFly, TomEE e GlassFish. Para o Tomcat, você deve instalá-lo separadamente, exatamente como já fez para o JSF. Veja também Como instalar o CDI no Tomcat?