2012-06-12 37 views
23

Đây có thể là câu hỏi noob, tuy nhiên trong nhiều hướng dẫn và ví dụ tôi thấy các chú thích này được sử dụng giống như chúng đã thực hiện tương tự.Sự khác biệt giữa chú thích @Named và @ManagedBean trong JSF2.0 Tomcat7

Tuy nhiên, tôi đã gặp phải một số hạn chế khi sử dụng @Named (đặc biệt với việc tiêm phụ thuộc, v.v.) Tôi không thể tìm thấy nguồn khác biệt và tôi rất biết ơn nếu ai đó có thể đưa ra tổng quan sơ lược về thời điểm sử dụng cái này hay cái kia.

+1

Loại giới hạn nào? '@ ManagedBean' là tập con của các hàm' @ Named', vì vậy '@ Named' sẽ hoạt động ở mọi nơi. –

Trả lời

36

@Named cung cấp cho CDI được quản lý bean một tên EL được sử dụng trong các công nghệ chế độ xem như JSF hoặc JSP. Lưu ý rằng trong một ứng dụng CDI, bạn không cần chú thích @Named để tạo một bean được quản lý bởi CDI (nhờ @Karl cho nhận xét của mình).

@ManagedBean làm cho đậu bằng JSF quản lý và bạn có thể:

  • tiêm nó vào đậu @ManagedBean chú thích khác
  • truy cập nó từ quan điểm của bạn qua ngôn ngữ biểu hiện
  • (nhưng không phải vào đậu @Named!)

Xem điều này related question để biết thêm thông tin về cách thức hoạt động của loại tiêm trong cả hai loại đậu.

Lưu ý rằng cũng có sự khác biệt với phạm vi của hạt. Chúng đến từ các gói khác nhau nhưng được đặt tên giống nhau (JSF: javax.faces.bean, CDI: javax.enterprise.context, do đó, thường là nguồn gây nhầm lẫn và nhầm lẫn nếu bạn bao gồm lớp sai.

Từ kinh nghiệm của tôi: Bạn nên sử dụng hạt CDI bất cứ khi nào có thể vì chúng linh hoạt hơn so với các bean được JSF quản lý. Chỉ có nhược điểm là CDI không biết phạm vi xem, vì vậy bạn cần phải quay lại @ManagedBean hoặc sử dụng một số phần mở rộng của bên thứ ba như Seam

+1

+1. @matt: Tôi nghĩ' RequestScoped + KeepAlive = ViewScoped' để có thể được sử dụng với @ Tên tôi là đúng? – Addicted

+0

@Abhinav: KeepAlive từ một số thư viện thành phần như Richfaces? –

+0

Cảm ơn rất nhiều vì lời giải thích của bạn! – user871784

Các vấn đề liên quan