我有一个使用 Springs @Transactional 进行数据库回滚的方法。当我像这样定义事务管理器时它工作正常:
<tx:annotation-driven transaction-manager="txManager" mode="proxy" />
但是当我更改为mode="aspectj"
它时,该方法抛出异常时不会回滚。
这两种模式的使用方式有什么不同吗?
我有一个使用 Springs @Transactional 进行数据库回滚的方法。当我像这样定义事务管理器时它工作正常:
<tx:annotation-driven transaction-manager="txManager" mode="proxy" />
但是当我更改为mode="aspectj"
它时,该方法抛出异常时不会回滚。
这两种模式的使用方式有什么不同吗?
“aspectj”模式仅在加载时编织或编译时编织启用时才有效。如果不是,则@Transactional
注释将不会应用于带注释的方法。
默认代理模式不能用于注释private
方法。这就是aspectj
模式有用的地方。某些框架(例如用于 Web 服务的 W2O)需要类类型本身才能工作。使用代理模式这是不可能的,因为该类被包装在代理类包装器中。这是使用AspectJ
.
如果public
使用方法并且没有特殊的框架限制,那么代理模式就足够了。
另请参阅:事务管理