这是Spring AOP(动态对象和cglib)的局限性。
如果你将Spring配置为使用AspectJ处理事务,那么你的代码将起作用。
最简单且可能最好的选择是重构代码。例如,一个处理用户的类和一个处理每个用户的类。然后,Spring AOP的默认事务处理将起作用。
为了使Spring能够将AspectJ用于事务,必须将模式设置为AspectJ:
<tx:annotation-driven mode="aspectj"/>
如果你使用的Spring版本低于3.0,则还必须将其添加到Spring配置中:
<bean class="org.springframework.transaction.aspectj
.AnnotationTransactionAspect" factory-method="aspectOf">
<property name="transactionManager" ref="transactionManager" />
</bean>