@ManagedProperty
và @NoneScoped
xuất phát từ thông số JSF 2.0 trong khi @Inject
xuất phát từ thông số CDI.
Nếu bạn chỉ đang làm việc trên một ứng dụng servlet không sử dụng bất kỳ tính năng nào khác của JavaEE 6, hãy truy cập @ManagedProperty
. Chú thích đó cũng có lợi thế so với @Inject
: bạn có thể sử dụng EL (ngôn ngữ biểu thức) với nó (although there are workarounds to get that in CDI).
Cả chú thích/vùng chứa dường như đạt được "cùng một điều" nhưng theo những cách rất khác nhau và chúng hoạt động với các vùng chứa khác nhau. Đậu được quản lý bởi CDI sẽ có sẵn cho JSF nhưng không có sẵn cho phó. Nếu bạn chú thích các bean của bạn với các chú thích JSF cụ thể thì hãy quên sử dụng các định dạng tùy chỉnh, các trình chặn, các phương thức sản xuất, v.v. Tôi thường thích phương pháp tiếp cận với CDI hơn, vì cuối cùng nó phức tạp hơn nhưng sự lựa chọn sẽ phụ thuộc vào nhu cầu thực tế của bạn .
Bao bì nó lên, vì nó có vẻ như bạn chỉ sử dụng các tính năng JSF sau đó dính vào @ManagedProperty
(CDI không thể hiểu @NoneScoped
chú thích, trong CDI tất cả đậu là thuộc phạm vi @Default
nếu không có chỉ định). Chuyển sang CDI trong dự án của bạn có thể thay thế không chỉ là @ManagedProperty
đối với một @Inject
một, nhưng tất cả @RequestScoped
(v.v.) của bạn cho CDI cụ thể.
Nguồn
2012-08-31 13:20:21
tôi sẽ thêm này, tương tự như những gì dưới đây, bạn có những thứ như EJB bạn có thể tiêm với CDI. Bạn cũng có thể giữ chúng ra khỏi tầm nhìn của bạn nếu bạn không cung cấp cho họ một @Name (mà chỉ đơn giản là làm cho chúng có sẵn cho EL). Sử dụng CDI cũng cung cấp cho bạn các điểm mở rộng lớn hơn những gì có sẵn trong JSF, nhưng đó không phải là một phần của câu hỏi :) Tôi đề nghị gắn bó với CDI. – LightGuard