Tôi biết rằng lớp dịch vụ Grails thuộc loại Singleton. Vì lý do gì, các lớp dịch vụ được định nghĩa là Singleton?Tại sao Grails Service Class là Singleton?
Xin cảm ơn trước.
Tôi biết rằng lớp dịch vụ Grails thuộc loại Singleton. Vì lý do gì, các lớp dịch vụ được định nghĩa là Singleton?Tại sao Grails Service Class là Singleton?
Xin cảm ơn trước.
dịch vụ Grails có thể used with different scopes, không chỉsingleton
, bằng cách thêm một cái gì đó như thế này để các lớp:
static scope = "flow"
Từ hướng dẫn:
prototype
- Một dịch vụ mới được tạo ra mỗi thời gian nó được tiêm vào một lớp khácrequest
- Một dịch vụ mới sẽ được tạo theo yêu cầuflash
- Một dịch vụ mới sẽ được tạo ra cho các yêu cầu hiện tại và tiếp theo chỉflow
- Trong web chảy dịch vụ này sẽ tồn tại cho phạm vi của dòng chảyconversation
- Trong web chảy dịch vụ này sẽ tồn tại cho phạm vi của cuộc trò chuyện. tức là một dòng chảy gốc và phụ của nó chảysession
- Một dịch vụ được tạo ra cho phạm vi của một phiên người dùngsingleton
(mặc định) - Chỉ có một thể hiện của các dịch vụ bao giờ tồn tạiLý do chính cho chọn singleton
làm mặc định cho hiệu suất tốt hơn, cả về giảm sử dụng bộ nhớ (chỉ có một cá thể đang ngồi xung quanh), và trong thời gian xử lý giảm, bởi vì bạn loại bỏ chi phí tạo đối tượng mới.
Bây giờ tôi có một nghi ngờ. Cho phép nói rằng tôi có dịch vụ có tên 'm1', hỗ trợ giao dịch. Bây giờ hai người dùng đang truy cập đồng thời 'm1', với điều kiện là' dịch vụ' là singleton, nó xử lý hai người dùng cùng một lúc cùng với hỗ trợ giao dịch như thế nào? –
Có [toàn bộ phần trong hướng dẫn sử dụng về giao dịch] (http://grails.org/doc/latest/guide/services.html#declarativeTransactions). Các giao dịch được xử lý trong các cuộc gọi phương thức, do đó phạm vi không đi vào nó (miễn là bạn không lưu trữ trạng thái trong dịch vụ). – OverZealous