Użyj CDI.
Zgodnie z JSF 2.3 @ManagedBeanjest przestarzałe . Zobacz także wydanie specyfikacji 1417 . Oznacza to, że nie jest już powodem do wyboru @ManagedBeanponad @Named. Zostało to po raz pierwszy wdrożone w Mojarra 2.3.0 w wersji beta m06.

Historia
Podstawowa różnica polega na tym, że @ManagedBeanjest zarządzana przez framework JSF i jest @ManagedPropertydostępna tylko dla innego zarządzanego komponentu bean JSF. @Namedjest zarządzany przez serwer aplikacji (kontener) poprzez CDI ram i jest poprzez @Injectdostępny na każdym rodzaju pojemnika zarządzanej artefaktu jak @WebListener, @WebFilter, @WebServlet, @Path, @Stateless, etc a nawet JSF @ManagedBean. Z drugiej strony w sprawie, @ManagedPropertyczy nie działa Wewnątrz @Namedlub innego pojemnika zarządzanej artefaktu. Działa naprawdę tylko wewnątrz @ManagedBean.
Inną różnicą jest to, że CDI faktycznie wstrzykuje serwery proxy delegujące do bieżącej instancji w zakresie docelowym na podstawie żądania / wątku (tak jak w przypadku wstrzykiwania EJB). Mechanizm ten pozwala na wstrzyknięcie ziarna o węższym zakresie do ziarna o szerszym zakresie, co nie jest możliwe w przypadku JSF @ManagedProperty. JSF „wstrzykuje” tutaj fizyczną instancję bezpośrednio, wywołując metodę ustawiającą (dokładnie dlatego jest ona wymagana, podczas gdy nie jest to wymagane w przypadku @Inject).
Chociaż nie jest to bezpośrednio wada - są inne sposoby - zakres @ManagedBeanjest po prostu ograniczony. Z drugiej strony, jeśli nie chcesz narażać się na zbyt wiele @Inject, możesz po prostu zatrzymać zarządzaną fasolę @ManagedBean. To jak w protectedporównaniu public. Ale to się nie liczy.
Przynajmniej w JSF 2.0 / 2.1 główną wadą zarządzania komponentami typu bean obsługującymi JSF przez CDI jest brak odpowiednika formatu CDI @ViewScoped. @ConversationScopedZbliża, ale nadal wymaga ręcznego uruchamiania i zatrzymywania i dołącza brzydki cidparametr zapytania do adresów URL wyniku. MyFaces CODI ułatwia to poprzez w pełni przezroczyste mostkowanie JSF javax.faces.bean.ViewScopeddo CDI, więc możesz to zrobić @Named @ViewScoped, jednak dołącza to brzydki windowIdparametr żądania do URL-i wynikowych wyników, również w zwykłej nawigacji między stronami. OmniFaces rozwiązuje to wszystko za pomocą prawdziwego CDI, @ViewScopedktóry naprawdę wiąże zakres beana ze stanem widoku JSF zamiast z dowolnym parametrem żądania.
JSF 2.2 (który został wydany 3 lata po tym pytaniu / odpowiedzi) oferuje nową, w pełni kompatybilną z CDI @ViewScopedadnotację w wersji javax.faces.view.ViewScoped. JSF 2.2 jest nawet dostarczany z tylko CDI, @FlowScopedktóry nie ma @ManagedBeanodpowiednika, popychając tym samym użytkowników JSF w kierunku CDI. Oczekuje się, że @ManagedBeani znajomi zostaną wycofani zgodnie z Java EE 8. Jeśli nadal używasz @ManagedBean, zdecydowanie zalecamy przejście na CDI, aby przygotować się na przyszłe ścieżki aktualizacji. CDI jest łatwo dostępny w kontenerach zgodnych z Java EE Web Profile, takich jak WildFly, TomEE i GlassFish. W przypadku Tomcata musisz zainstalować go osobno, dokładnie tak, jak to zrobiłeś dla JSF. Zobacz także Jak zainstalować CDI w Tomcat?