Câu hỏi này hơi dài vì nó mang tính khái niệm. Tôi hy vọng nó không phải là một xấu đọc :)Controller (Spring Managed Bean) Phạm vi Câu hỏi: Singleton, Yêu cầu hoặc Phiên?
Tôi đang làm việc trong một hiệu suất quan trọng Spring MVC/Tiles web-app (10.000 người dùng tải điển hình). Chúng tôi tải một màn hình nhân viên cập nhật, nơi chúng tôi tải một màn hình chi tiết nhân viên (ràng buộc với một đối tượng kinh doanh của nhân viên) cho các bản cập nhật thông qua một MultiActionController. Có nhiều tab trên màn hình này, nhưng chỉ tab1 có dữ liệu updatabale. Phần còn lại của các tab là công cụ chỉ đọc, để tham khảo về cơ bản. Không cần phải nói, chúng tôi đã quyết định tải các tab chỉ đọc này theo cách lười biếng, tức là khi mỗi tab được kích hoạt, chúng tôi sẽ thực hiện cuộc gọi ajax (một lần) để tìm nạp dữ liệu từ máy chủ. Chúng tôi không tải mọi thứ thông qua phương thức tải chế độ xem cập nhật. Hãy nhớ rằng: đây là một lần, dữ liệu chỉ đọc.
Hiện tại, tôi đang gặp khó khăn. Tôi đã thực hiện một bộ điều khiển đa tác vụ khác, có tên là "AjaxController" để xử lý các cuộc gọi ajax này. Bây giờ, câu hỏi của tôi:
- Phạm vi tốt nhất cho bộ điều khiển này là gì?
Suy nghĩ: Nếu tôi yêu cầu phạm vi thì 10.000 người dùng cùng nhau có thể tạo 10.000 bản sao của bean này: vấn đề bộ nhớ ở đó. Nếu tôi làm cho nó phiên scoped, sau đó một sẽ được tạo ra cho mỗi phiên người dùng. Điều đó có nghĩa, khi 10.000 người dùng đăng nhập vào ứng dụng, bất kể họ có nhấn các phương thức AjaxController hay không, thì mỗi người dùng sẽ có một bean.
- Sau đó, là singleton phạm vi tốt nhất cho bộ điều khiển này?
Suy nghĩ: Một hạt đơn sẽ được tạo khi khởi động mùa xuân và ví dụ này sẽ được cung cấp trong suốt. Nghe hay đấy.
- Phương thức xử lý (như fetchTab7DataInJsonFormat) có phải là tĩnh và được gắn với lớp không?
Suy nghĩ: Trong trường hợp này, có thể havign phương pháp tĩnh xung đột về mặt ngữ nghĩa với phạm vi? Ví dụ: không phạm vi = "phiên"/"yêu cầu" + phương pháp tĩnh có ý nghĩa? Tôi hỏi bởi vì mặc dù mỗi phiên người dùng có bean AjaxController riêng của nó, nhưng các phương thức xử lý thực sự được gắn vào lớp và không phải là các cá thể. Ngoài ra, không phạm vi = "singleton" + phương pháp xử lý tĩnh có ý nghĩa?
- Tôi có thể triển khai mẫu thiết kế đơn lẻ vào AjaxController theo cách thủ công không?
Suy nghĩ: Điều gì sẽ xảy ra nếu tôi kiểm soát việc tạo: thực hiện đơn giản GoF singleton. Sau đó, đặc tả phạm vi có thể làm gì? Phạm vi phiên/yêu cầu chắc chắn không thể tạo ra nhiều trường hợp có thể họ?
- Nếu, bởi bất kỳ cơ chế nào (đặc tả đậu/kiểu thiết kế/phương pháp tĩnh), tôi quản lý để có một cá thể của AjaxController: Các phương thức STATIC này có cần được đồng bộ không? Tôi nghĩ là không, bởi vì ngay cả khi các phương thức xử lý STATIC có thể nói chuyện với các dịch vụ (mà nói chuyện với DB/WS/MQ, vv) mất thời gian, tôi nghĩ rằng mỗi chuỗi yêu cầu nhập vào các phương thức tĩnh sẽ được trả về bởi quyền chủ đề của chúng? Nó không giống như user1 nhập vào phương thức tĩnh, và sau đó user2 nhập vào phương thức tĩnh trước khi user1 được trả về, và sau đó cả hai đều nhận được một số dữ liệu bị cắt xén? Điều này có lẽ là ngớ ngẩn, nhưng tôi muốn chắc chắn.
Tôi đang bối rối. Về cơ bản tôi muốn chính xác một cá thể duy nhất của bean điều khiển phục vụ tất cả các yêu cầu cho tất cả các máy khách.
Lưu ý quan trọng: Hạt AjaxController không được INJECTED ở bất kỳ nơi nào khác, nó tồn tại riêng biệt. Đó là phương pháp được nhấn thông qua các cuộc gọi ajax.
Sai lầm lớn về phía tôi. LazyLoadController IS AjaxController. Tôi nghĩ đến một cái tên trong khi bắt đầu viết câu hỏi, và sau đó quay trở lại một tên khác trong các câu hỏi. Xin lỗi, tôi đã chỉnh sửa bài đăng. Có, bạn đã có quyền sử dụng. Trong thực tế, tôi có một lớp dịch vụ thực hiện chính xác điều đó và AjaxController này chỉ hoạt động như một bộ điều phối yêu cầu và trình xử lý đáp ứng. Một số nghi ngờ của tôi vẫn liên quan đến các tình huống xung đột. Hiện tại AjaxController của tôi là singleton, và có các phương thức tĩnh để xử lý các yêu cầu và tương tác với lớp dịch vụ. Bất cứ điều gì sai thiết lập này? – SpringConfused
Tôi hiểu. Cập nhật câu trả lời của tôi với giải thích lý do tại sao phương pháp tĩnh là sai. –