问问题
1710 次
1 回答
3
这通常是因为当您将 @Transactional 放在一个方法上时,Spring 会为该 bean 创建一个动态代理 - 如果 bean 实现了一个接口,则基于该接口创建动态代理,否则 CGLIB 将用于创建代理。
我猜你的问题是因为你的控制器可能基于某个接口,或者你正在基于基类扩展它。这最终会基于该接口创建一个代理,因为当需要为您的请求创建映射时,Spring MVC 可能无法从您的 bean 中找到您的映射。
修复可能有几个:
一种。您可以尝试强制代理基于 CGLIB 进行交易:
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
湾。您可以使用纯 Aspectj,加载时编织或编译时编织
C。您可以将@Transactional 移动到服务(具有接口)中并将调用从控制器委托给服务,这样可以避免控制器上的@Transaction
于 2012-08-10T12:42:32.820 回答