Springs @Transactional仅适用于代理

时间:2013-07-16 10:41:29

标签: java spring transactions aop aspectj

我有一个使用Springs @Transactional进行数据库回滚的方法。当我像这样定义事务管理器时,它工作正常:

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

但是当我更改为mode="aspectj"时,当方法抛出异常时它不会回滚。

这两种模式应该如何使用?

1 个答案:

答案 0 :(得分:1)

“aspectj”模式仅在启用了加载时编织或编译时编织时才起作用。如果不是,那么@Transactional注释将不会应用于带注释的方法。

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

如果使用public方法并且没有特殊的框架限制,那么代理模式就足够了。

另请参阅:Transaction Management