11

我开始知道 Grails 服务类是单例类型的。出于什么原因,服务类被定义为单例?

提前致谢。

4

1 回答 1

20

Grails 服务可以与不同的范围一起使用,而不仅仅是 singleton,通过在类中添加类似这样的内容:

static scope = "flow"

从手册:

  • prototype- 每次注入另一个类时都会创建一个新服务
  • request- 每个请求都会创建一个新服务
  • flash- 仅为当前和下一个请求创建新服务
  • flow- 在网络流中,服务将存在于流的范围内
  • conversation- 在网络流中,服务将存在于对话范围内。即根流及其子流
  • session- 为用户会话的范围创建服务
  • singleton(默认)- 只存在一个服务实例

选择默认值的主要原因singleton是为了获得更好的性能,既可以减少内存使用量(只有一个实例存在),也可以减少处理时间,因为您消除了创建新对象的开销。

于 2012-06-19T06:20:26.193 回答