Usa CDI.
Secondo JSF 2.3, @ManagedBeanè deprecato . Vedere anche il problema delle specifiche 1417 . Questo significa che non c'è più un motivo per scegliere @ManagedBeansopra @Named. Questo è stato implementato per la prima volta in Mojarra 2.3.0 versione beta m06.

Storia
La differenza principale è che @ManagedBeanè gestito dal framework JSF ed è @ManagedPropertydisponibile solo tramite un altro bean gestito JSF. @Namedè gestito da server di applicazione (il contenitore) tramite quadro CDI ed è via @Injectdisponibile per qualsiasi tipo di un contenitore artefatto gestita come @WebListener, @WebFilter, @WebServlet, @Path, @Stateless, ecc e anche un JSF @ManagedBean. Dall'altro lato su, @ManagedPropertynon non funzioneranno dentro @Namedo qualsiasi altro contenitore artefatto gestiti. Funziona davvero solo all'interno @ManagedBean.
Un'altra differenza è che CDI inietta effettivamente i proxy che delegano all'istanza corrente nell'ambito di destinazione in base alla richiesta / thread (come il modo in cui sono stati iniettati gli EJB). Questo meccanismo consente di iniettare un bean di uno scope più ristretto in un bean di uno scope più ampio, cosa che non è possibile con JSF @ManagedProperty. JSF "inietta" qui l'istanza fisica direttamente invocando un setter (che è anche esattamente il motivo per cui è richiesto un setter, mentre quello non è richiesto con @Inject).
Sebbene non sia direttamente uno svantaggio - ci sono altri modi - la portata di @ManagedBeanè semplicemente limitata. Dall'altro punto di vista, se non vuoi esporre "troppo" per @Inject, puoi anche mantenere i tuoi fagioli gestiti @ManagedBean. È come protectedcontro public. Ma questo non conta davvero.
Almeno, in JSF 2.0 / 2.1, il principale svantaggio della gestione dei backing bean JSF da parte di CDI è che non esiste un equivalente CDI di @ViewScoped. Si @ConversationScopedavvicina, ma richiede ancora l'avvio e l'arresto manuali e aggiunge un brutto cidparametro di richiesta agli URL dei risultati. MyFaces CODI rende tutto più semplice collegando in modo completamente trasparente i JSF javax.faces.bean.ViewScopeda CDI in modo da poterlo fare @Named @ViewScoped, tuttavia ciò aggiunge un brutto windowIdparametro di richiesta agli URL dei risultati, anche sulla semplice navigazione da pagina a pagina. OmniFaces risolve tutto questo con un vero CDI @ViewScopedche lega realmente l'ambito del bean allo stato di visualizzazione JSF invece che a un parametro di richiesta arbitrario.
JSF 2.2 (che viene rilasciato 3 anni dopo questa domanda / risposta) offre una nuova @ViewScopedannotazione completamente compatibile CDI fuori dagli schemi in sapore di javax.faces.view.ViewScoped. JSF 2.2 arriva anche con un solo CDI @FlowScopedche non ha un @ManagedBeanequivalente, spingendo gli utenti JSF verso CDI. L'aspettativa è che gli @ManagedBeanamici saranno deprecati in base a Java EE 8. Se stai ancora utilizzando @ManagedBean, è quindi fortemente consigliato passare a CDI per essere preparati per futuri percorsi di aggiornamento. CDI è immediatamente disponibile nei contenitori compatibili con Java EE Web Profile, come WildFly, TomEE e GlassFish. Per Tomcat, devi installarlo separatamente, esattamente come hai già fatto per JSF. Vedi anche Come installare CDI in Tomcat?