2012-06-19 43 views

回答

18

Grails服務可能used with different scopes,不只是singleton,加入像這樣的類:

static scope = "flow" 

從手冊:

  • prototype - 一個新的服務創建的每個它被注入到另一個類中
  • request - 每個請求都會創建一個新服務
  • flash - 一個新的服務將用於當前和下一請求僅
  • flow創建 - 在網絡中流動的服務將用於流
  • conversation的範圍存在 - 在網絡中流動的服務將存在於談話的範圍。即,根流和它的子流
  • session - 對於用戶會話的範圍,創建服務
  • singleton(缺省) - 的服務只有一個實例永遠存在

的主要原因選擇singleton作爲默認值是爲了獲得更好的性能,無論是在減少的內存使用情況下(只有一個實例處於閒置狀態)以及減少的處理時間,因爲您可以消除創建新對象的開銷。

+0

現在我懷疑了。假設我有一個名爲'm1'的服務,它支持事務。現在兩個用戶同時訪問'm1',前提是'service'是單例,它如何同時處理兩個用戶以及事務支持? –

+1

有[交易手冊中的整個部分](http://grails.org/doc/latest/guide/services.html#declarativeTransactions)。事務在方法調用期間處理,因此作用域不會進入它(只要您不在服務中存儲狀態)。 – OverZealous