Tóm lại: Bạn thậm chí có thể kết hợp nó ( @Singleton
và @ApplicationScoped
) và nó có ý nghĩa trong một số trường hợp.
(và hoạt động như mong đợi ở tôi!)
Ngoài các câu trả lời khác cho đến nay, tôi muốn bổ sung thêm một số điểm để làm rõ trong các tình huống thế giới thực.
Đối với tôi, câu hỏi này được phát triển từ Làm cách nào để buộc một bean trong phạm vi ứng dụng khởi tạo khi khởi động ứng dụng?
Trong một số cuộc thảo luận ở đó, tôi đã nêu điều này và không thể tìm thấy một lập luận hợp lệ nào chống lại nó cho đến nay:
Trong rất nhiều kịch bản / thiết lập thực tế, tôi sẽ nói rằng thật khó để nói chắc chắn - từ quan điểm trừu tượng / mô hình hóa - liệu một cái gì đó (hoặc sẽ trở thành / được đối xử như) một EJB hay một hạt đậu được quản lý trong phạm vi ứng dụng.
Các lập luận (có thể tranh luận nhưng không kết luận) (theo quan điểm của tôi) chống lại nó cho đến nay: (@BalusC và tất cả những người khác: Tôi muốn thấy họ đưa ra kết luận, nhưng nếu không, những điều trên có thể đúng và tuy nhiên các lập luận có thể vẫn giúp người đọc nhận ra sự khác biệt / thuận lợi / khó khăn / xấu / tốt)
EJB so với Managed Bean
BalusC : Đó là một EJB không phải là một bean được quản lý, điều này hoàn toàn khác. Các EJB chạy trong chương trình phụ trợ và các bean được quản lý trong giao diện người dùng. EJB cũng chạy trong ngữ cảnh giao dịch. [...] Bạn vừa nhầm lẫn giữa đậu doanh nghiệp với đậu được quản lý và tôi chỉ ra điều đó.
nhưng:
tôi : Tôi nghĩ rằng bạn không hoàn toàn chính xác và nói quá về ý nghĩa / cách sử dụng và nó có vẻ gây tranh cãi với tôi. http://en.wikipedia.org/wiki/Enterprise_JavaBeans
Enterprise JavaBeans (EJB) là một phần mềm máy chủ được quản lý để xây dựng mô-đun phần mềm doanh nghiệp và là một trong một số API Java. EJB là một thành phần phần mềm phía máy chủ đóng gói logic nghiệp vụ của một ứng dụng.
Các loại Đậu Doanh nghiệp
Đậu phiên [3] có thể là "Trạng thái", "Không trạng thái" hoặc "Singleton" [...]
Message Driven Beans [...]
... mà vẫn đúng trong trường hợp của tôi.
Singleton EJB so với Đậu phạm vi ứng dụng
Khóa
BalusC : Một EJB singleton không giống như một bean phạm vi ứng dụng. Một EJB đơn bị khóa đọc / ghi và do đó có khả năng không hiệu quả / được thay thế quá mức cho nhiệm vụ bạn đã nghĩ đến. Câu chuyện ngắn: Lấy một cuốn sách Java EE hay và học cách sử dụng công cụ phù hợp cho công việc. Một cách chắc chắn không phải là cách khác. Rằng nó hoạt động không có nghĩa là nó là công cụ phù hợp. Một chiếc búa tạ có khả năng vặn ốc vít, nhưng nó không nhất thiết phải là công cụ phù hợp để làm điều đó :)
nhưng:
(Tôi không thể nhìn thấy cái búa tạ ở đây - xin lỗi ...) Thật tốt khi biết các mặc định khóa (tôi không biết về nó), nhưng điều này có vẻ lại không chính xác: Oracle Java EE 6 Hướng dẫn về Quản lý Truy cập Đồng thời trong một Đậu phiên Singleton
Khi tạo một bean phiên singleton, quyền truy cập đồng thời vào các phương thức nghiệp vụ của singleton có thể được kiểm soát theo hai cách: đồng thời được quản lý bởi vùng chứa và đồng thời do bean quản lý. [...]
Mặc dù theo mặc định, các singlet sử dụng đồng thời do vùng chứa quản lý, chú thích @ConcurrencyManagement (CONTAINER) có thể được thêm vào ở cấp lớp của singleton để thiết lập rõ ràng loại quản lý đồng thời
@ApplicationScoped
và@Singleton
tại phần 5.4 (trang 36).