2012-06-19 30 views

Trả lời

18

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ác
  • request - Một dịch vụ mới sẽ được tạo theo yêu cầu
  • flash - 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ảy
  • conversation - 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ảy
  • session - Một dịch vụ được tạo ra cho phạm vi của một phiên người dùng
  • singleton (mặc định) - Chỉ có một thể hiện của các dịch vụ bao giờ tồn tại

Lý 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.

+0

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? –

+1

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

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