2012-06-19 29 views

cevap

18

Grails hizmetleri, used with different scopes olabilir sadecesingleton sınıfa böyle bir şey ekleyerek değil: manuel itibaren

static scope = "flow" 

:

  • prototype - Yeni bir hizmet oluşturulur her zaman başka bir sınıf
  • request içine enjekte edilir - İstek başına yeni bir hizmet oluşturulacak
  • flash - Yeni bir hizmeti sadece
  • flow mevcut ve gelecek istek için oluşturulacak - web yılında hizmet akışının
  • conversation kapsamı için var olacaktır akar - web yılında hizmet için var olacaktır akar konuşmanın kapsamı. yani bir kök akış ve alt
  • session akar - Bir hizmet bir kullanıcı oturumu kapsamında oluşturulur
  • singleton (varsayılan) - Hizmet da yalnızca bir örnek

temel nedeni için var singleton öğesinin seçilmesi, varsayılan olarak hem düşük bellek kullanımında (yalnızca tek bir örnekte bulunur) hem de daha az işlem süresiyle, yeni bir nesne oluşturmanın ek yükünü ortadan kaldırdığınız için daha düşük performans elde etmektir.

+0

Şimdi bir şüphem var. İşlemi destekleyen 'm1' adlı hizmetim olduğunu varsayalım. Artık iki kullanıcı 'service' singleton olması koşuluyla eş zamanlı olarak 'm1''e erişiyor, aynı anda iki kullanıcıyı aynı anda işlem desteği ile nasıl ele alıyor? –

+1

[İşlemlerde el kitabında bir bölüm var] (http://grails.org/doc/latest/guide/services.html#declarativeTransactions). İşlemler, yöntem çağrıları sırasında ele alınır, bu yüzden kapsamı devreye girmez (hizmeti eyalette saklamıyorsanız). – OverZealous