Spring的@Transactional仅对代理有效

4
我有一个使用Spring的@Transactional进行数据库回滚的方法。当我像这样定义事务管理器时,它可以正常工作:
    <tx:annotation-driven transaction-manager="txManager" mode="proxy" />

但是当我将mode="aspectj"更改时,它不会在方法抛出异常时回滚。这两种模式的使用方式是否有所不同?
1个回答

1
“aspectj”模式只有在启用了加载时编织或编译时编织时才能起作用。否则,@Transactional注释将不会应用于已注释的方法。
默认代理模式不能用于注释private方法。这就是aspectj模式有用的地方。某些框架(如Web Services的W2O)需要类类型本身才能工作。使用代理模式可能无法实现,因为该类被包装在代理类包装器中。这是使用AspectJ的另一个原因。
如果使用public方法并且没有特殊的框架限制,则代理模式就足够了。
另请参见:Transaction Management

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接