Grails 1.1 Service 层 - 服务作用域

默认情况下,存取服务方法是非同步的,所以无法阻止同步执行这些函数。

事实上,因为服务是单例的,可以被同时使用,你必须非常小心服务中存储状态。

或者采用容易(和更好的)途径并不在y service中存储状态。

你可以通过把service放置于特定的作用域来改变这样的行为:

• prototype -一个新的service每次被注入到其他类时创建

• request - 一个新的service在每次请求时创建

• flash - 一个新的service只在当前或下个请求时创建

• flow - 在web flows中, service将存在于flow的作用域

• conversation - 在web flows中, service将存在于会话的作用域。根flow和它的子 flows

• session - 一个service被创建用于session的作用域

• singleton (默认) - 只有一个实例的service,任何时候都存在

假如你的service为flash, flow 或 conversation 作用域,它需要实现java.io.Serializable 并只用于 Web Flow上下文为了启用一个作用域,在你的类中添加一个静态scope属性,其值为上面所述的作用域之一:static scope = "flow"