java – Springs @Transactional仅适用于代理

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

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

但当我更改为mode =“aspectj”时,它不会在方法抛出异常时回滚.

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

解决方法:

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

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

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

另见:Transaction Management

上一篇:java – 我们可以禁用AOP调用吗?


下一篇:Spring AOP 使用介绍,从前世到今生