我知道这可能是重复的,具有讽刺意味的是,在我开始阅读之前,我想知道它是什么意思(无需说出来但我仍然会说出来,请纠正我,我在哪里错了):
它使程序员不必使用transaction.begin()
和commit()
如果你有一个调用两个DAO方法的方法,通常每个方法都包含transaction.begin
和transaction.commit
包含实际操作并调用它们,那么它将导致两个事务(如果是前一个,可能会出现回滚问题DAO方法也应该回滚)。
但是,如果您在方法上使用@transactional
,则这些DAO调用将包含在单个begin()
- commit()
周期中。当然,如果您使用@transactional
,DAO不得使用我认为的begin()
和commit()
方法。
答案 0 :(得分:3)
您可以通过两种方式处理Transactions
:Programmatically
和Declarative
。
在使用transaction.begin
和transaction.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等)的相同属性,如果您使用这些属性,事务行为可能会发生变化。