Spring @Transaction方法由同一类中的方法调用,不起作用吗?
我是Spring Transaction的新手。我发现有些事情很奇怪,也许我确实理解得很清楚。我想在方法级别周围进行事务处理,而我在同一个类中有一个调用者方法,似乎不喜欢它,必须从单独的类中调用它。我不知道怎么可能。如果有人知道如何解决此问题,我将不胜感激。我想使用相同的类来调用带注释的事务方法。
这是代码:
public class UserService { @Transactional
public boolean addUser(String userName, String password) {
try {
// call DAO layer and adds to database.
} catch (Throwable e) {
TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();
}
}
public boolean addUsers(List<User> users) {
for (User user : users) {
addUser(user.getUserName, user.getPassword);
}
}
}
回答:
这是Spring AOP(动态对象和cglib)的局限性。
如果你将Spring配置为使用AspectJ处理事务,那么你的代码将起作用。
最简单且可能最好的选择是重构代码。例如,一个处理用户的类和一个处理每个用户的类。然后,Spring AOP的默认事务处理将起作用。
为了使Spring能够将AspectJ用于事务,必须将模式设置为AspectJ:
<tx:annotation-driven mode="aspectj"/>
如果你使用的Spring版本低于3.0,则还必须将其添加到Spring配置中:
<bean class="org.springframework.transaction.aspectj .AnnotationTransactionAspect" factory-method="aspectOf">
<property name="transactionManager" ref="transactionManager" />
</bean>
以上是 Spring @Transaction方法由同一类中的方法调用,不起作用吗? 的全部内容, 来源链接: utcz.com/qa/426806.html