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

回到顶部