Grails 1.1 Service 层 - 声明式事务处理

Services一般涉及协调 domain 类之间的逻辑, , 因此常常涉及大范围的持久化操作。

因为services性质,它们常常需要事物状态。你可以使用 withTransaction方法来编程事物,不过,这是重复性的,没有充分利用Spring强大的潜在事物抽象Services允许启用事物,本质上是以声明的方式来声明service中的所有方法必须用于事物。

默认情况下,所有services的事物都是可用的——禁用它,只需设置 transactional属性为false:class CountryService { static transactional = false }你也可以默认设置这个属性为 true 在以后改变它,或者清楚的表明这个服务是有意地用于事物。

警告: 依赖注入 是 唯一 声明事物工作的方式。你不能使用new操作符,像这样new BookService()获取事物服务其结果是,所有的方法都被包含在事物中,当方法体中抛出异常时,自动回滚。

事物的传播级别被默认设置为 PROPAGATION_REQUIRED.