Використовуйте CDI.
Відповідно з JSF 2.3, @ManagedBeanє застарілим . Дивіться також специфікацію випуску 1417 . Це означає , що є більше не причина , щоб вибрати @ManagedBeanбільш @Named. Це було вперше реалізовано в бета-версії m06r Mojarra 2.3.0.

Історія
Основна відмінність полягає в тому, що @ManagedBeanвона керується рамками JSF і є лише через @ManagedPropertyдоступні інші боби, що управляються JSF. @Namedуправляються сервер додатків (контейнер) через рамки CDI і з допомогою @Injectдоступні для будь-якого виду контейнера керованого артефакту , як @WebListener, @WebFilter, @WebServlet, @Path, @Stateless, і т.д. , і навіть JSF @ManagedBean. З іншого боку , на, @ManagedPropertyце НЕ працює в @Namedабо будь-якому іншому контейнер керованого артефакту. Він працює справді лише всередині @ManagedBean.
Ще одна відмінність полягає в тому, що CDI фактично вводить проксі-сервери, делегуючі поточному екземпляру, в цільовий обсяг на основі запиту / потоку (наприклад, як вводиться EJB). Цей механізм дозволяє вводити боб більш вузького обсягу в боби більш широкої області, що неможливо з JSF @ManagedProperty. JSF "вводить" сюди фізичний екземпляр безпосередньо шляхом виклику сетера (саме тому для встановлення потрібен сетер, хоча це не потрібно @Inject).
Хоча це не є прямим недоліком - існують і інші способи - сфера застосування @ManagedBeanпросто обмежена. З іншого боку, якщо ви не хочете виставляти "занадто багато" @Inject, ви також можете просто зберегти керовані боби @ManagedBean. Це як protectedпроти public. Але це насправді не рахується.
Принаймні, у JSF 2.0 / 2.1 головним недоліком управління резервними бобами JSF за допомогою CDI є те, що немає еквіваленту CDI @ViewScoped. Він @ConversationScopedнаближається, але все-таки вимагає запуску та зупинки вручну, і cidдо URL-адрес результатів додає некрасивий параметр запиту. MyFaces CODI полегшує повне прозоре з'єднання JSF javax.faces.bean.ViewScopedна CDI, так що ви можете просто робити @Named @ViewScoped, однак, додаючи некрасивий windowIdпараметр запиту до URL-адрес результатів, також на звичайній навігації зі сторінки на сторінку ванілі. OmniFaces вирішує це все за допомогою справжнього CDI, @ViewScopedякий дійсно прив'язує область бобу до стану перегляду JSF замість довільного параметра запиту.
JSF 2.2 (який виходить через 3 роки після цього питання / відповіді) пропонує нову повністю сумісну CDI @ViewScopedанотацію з коробки на смак javax.faces.view.ViewScoped. JSF 2.2 навіть постачається разом із CDI, @FlowScopedякий не має @ManagedBeanеквівалента, підштовхуючи користувачів JSF до CDI. Очікується, що @ManagedBeanі друзі будуть застаріли відповідно до Java EE 8. Якщо ви все ще використовуєте @ManagedBean, тому настійно рекомендуємо перейти на CDI, щоб бути готовим до майбутніх шляхів оновлення. CDI легко доступний у контейнерах, сумісних з веб-профілем Java EE, таких як WildFly, TomEE та GlassFish. Для Tomcat, ви повинні встановити його окремо, саме так, як ви вже робили для JSF. Дивіться також Як встановити CDI в Tomcat?