2013-07-16 86 views
2

我有一个使用温泉@Transactional数据库回滚的方法。泉@Transactional只适用于代理

<tx:annotation-driven transaction-manager="txManager" mode="proxy" /> 

但是当我改变mode="aspectj"当方法抛出一个异常,它不会回滚:当我定义事务管理器这样它工作正常。

是有两种模式应如何使用一些差异?如果负载时编织或编译时编织启用

回答

1

的“切面”模式才会工作。如果不是,则@Transactional注释不会被应用到批注的方法。

默认代理模式不能用于注释private方法。这是aspectj模式有用的地方。某些框架(例如Web服务的W2O)需要类类型本身才能工作。使用代理模式时,这是不可能的,因为该类被包装在代理类包装器中。这是使用AspectJ的另一个原因。

如果使用public方法,也没有特别的限制框架,然后代理模式就足够了。

另请参阅:Transaction Management