@Transactional做什么?

时间:2013-07-10 07:21:55

标签: java spring transactions spring-jdbc

我知道这可能是重复的,具有讽刺意味的是,在我开始阅读之前,我想知道它是什么意思(无需说出来但我仍然会说出来,请纠正我,我在哪里错了):

它使程序员不必使用transaction.begin()commit() 如果你有一个调用两个DAO方法的方法,通常每个方法都包含transaction.begintransaction.commit包含实际操作并调用它们,那么它将导致两个事务(如果是前一个,可能会出现回滚问题DAO方法也应该回滚)。

但是,如果您在方法上使用@transactional,则这些DAO调用将包含在单个begin() - commit()周期中。当然,如果您使用@transactional,DAO不得使用我认为的begin()commit()方法。

2 个答案:

答案 0 :(得分:3)

您可以通过两种方式处理TransactionsProgrammaticallyDeclarative

在使用transaction.begintransaction.commit和...时,您将以编程方式处理Transactions。这样,您可以对Transaction的边界进行更多控制,但最终会得到很多类似的代码(Cross Cutting Concerns)分散在整个项目中。

但是以Declarative的方式,处理Transactions的代码与您的业务逻辑分开,并且不会分散在您的整个项目中。这是Aspect Oriented Programming的主要概念之一。

答案 1 :(得分:0)

我建议您使用此链接解释Spring Transaction上的所有内容。

http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/transaction.html

您还应该看到有关Transactional(propagation,rollbackFor等)的相同属性,如果您使用这些属性,事务行为可能会发生变化。