1

我想将后端公开为“资源”(如 Restlet)并消除服务层,以便休息资源可以直接与道交互。这样,资源合同而不是接口。

如果事务由 Spring 在本地管理,在 Spring MVC 3 控制器上使用 @Transactional 语义是否存在问题?回滚和捕获异常的任何陷阱?

@RequestMapping(value = "/user/{userId}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@Transactional
public void updateUser(@PathVariable Long userId, @RequestBody ProfileUser user) {

   // dao update
}

spring config:
<tx:annotation-driven />
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
4

1 回答 1

0

我认为您可能会在这里遇到问题。默认情况下,Spring 将使用 JDK 动态代理将事务行为应用于您的方法。这依赖于您的控制器实现合适的接口,即公开 updateUser 方法的接口。Spring博客上有一篇很棒的博文。

由于 Spring 未能在代理上找到方法,您很可能会看到错误。

如果您告诉 Spring 使用基于 CGLIB 的代理,则可以使用上述方法。这在此处的文档中进行了描述。

于 2012-10-09T23:14:30.637 回答