Sử dụng CDI.
Theo JSF 2.3, @ManagedBeanđược tán thành . Xem thêm thông số kỹ thuật số 1417 . Điều này có nghĩa rằng có không nữa một lý do để lựa chọn @ManagedBeanhơn @Named. Điều này lần đầu tiên được triển khai trong phiên bản beta Mojarra 2.3.0 m06.

Lịch sử
Sự khác biệt cốt lõi là, @ManagedBeanđược quản lý bởi khuôn khổ JSF và chỉ @ManagedPropertycó sẵn cho các bean được quản lý JSF khác. @Namedđược quản lý bởi máy chủ ứng dụng (container) qua khuôn khổ CDI và là thông qua @Injectcung cấp cho bất kỳ loại một tạo tác quản lý container như @WebListener, @WebFilter, @WebServlet, @Path, @Stateless, vv và thậm chí là một JSF @ManagedBean. Từ phía bên kia về, @ManagedPropertykhông không làm việc bên trong một @Namedhoặc bất kỳ container quản lý vật khác. Nó chỉ hoạt động bên trong @ManagedBean.
Một sự khác biệt khác là CDI thực sự đưa các proxy ủy quyền cho phiên bản hiện tại trong phạm vi đích trên cơ sở mỗi yêu cầu / luồng (giống như cách EJB được đưa vào). Cơ chế này cho phép đưa một bean có phạm vi hẹp hơn vào bean có phạm vi rộng hơn, điều này không thể thực hiện được với JSF @ManagedProperty. JSF "đưa" vào đây trực tiếp cá thể vật lý bằng cách gọi một setter (đó cũng chính xác là lý do tại sao cần phải có setter, trong khi điều đó không bắt buộc với @Inject).
Mặc dù không trực tiếp là một bất lợi - có những cách khác - phạm vi của @ManagedBeannó chỉ đơn giản là hạn chế. Ở góc độ khác, nếu bạn không muốn phơi bày "quá nhiều" @Inject, bạn cũng có thể giữ lại những hạt đậu đã quản lý của mình @ManagedBean. Nó giống như protectedso với public. Nhưng điều đó không thực sự được tính.
Ít nhất, trong JSF 2.0 / 2.1, nhược điểm lớn của việc quản lý các hạt sao lưu JSF bằng CDI là không có CDI tương đương @ViewScoped. Quá trình @ConversationScopednày đến gần, nhưng vẫn yêu cầu bắt đầu và dừng theo cách thủ công và nó thêm một cidtham số yêu cầu xấu vào các URL kết quả. MyFaces CODI giúp việc này trở nên dễ dàng hơn bằng cách kết nối hoàn toàn minh bạch giữa JSF javax.faces.bean.ViewScopedvới CDI để bạn có thể thực hiện @Named @ViewScoped, tuy nhiên, điều đó sẽ thêm một windowIdtham số yêu cầu xấu vào các URL kết quả, cũng trên điều hướng từ trang đến trang đơn giản. OmniFaces giải quyết tất cả điều này bằng một CDI @ViewScopedthực sự liên kết phạm vi của bean với trạng thái xem JSF thay vì với một tham số yêu cầu tùy ý.
JSF 2.2 (được phát hành 3 năm sau câu hỏi / câu trả lời này) cung cấp một @ViewScopedchú thích hoàn toàn mới tương thích với CDI javax.faces.view.ViewScoped. JSF 2.2 thậm chí còn đi kèm với chỉ CDI @FlowScopedmà không có @ManagedBeantương đương, do đó thúc đẩy người dùng JSF hướng tới CDI. Kỳ vọng là như vậy @ManagedBeanvà bạn bè sẽ không được chấp nhận theo Java EE 8. Nếu bạn hiện vẫn đang sử dụng @ManagedBean, do đó, bạn nên chuyển sang CDI để chuẩn bị cho các lộ trình nâng cấp trong tương lai. CDI có sẵn trong các vùng chứa tương thích với Hồ sơ Web Java EE, chẳng hạn như WildFly, TomEE và GlassFish. Đối với Tomcat, bạn phải cài đặt nó một cách riêng biệt, chính xác như bạn đã làm cho JSF. Xem thêm Cách cài đặt CDI trong Tomcat?