如何在java中使用@Transactional

时间:2013-08-13 09:56:03

标签: java spring transactions

我有2个公共方法(为了便于理解,我简化它们) 第一种方法叫第二种。我的问题是我是否正确使用@Transactional。当我从其他类调用此方法时,它们应该在事务

@Transactional
public int f1(Integer a) {
    return f2(a.toString());
}

@Transactional
public int f2(String b) {
 ...
}

3 个答案:

答案 0 :(得分:4)

应该记住,从同一个bean调用事务方法是行不通的,因为它会绕过事务代理。在上面的例子中,调用from1 f1到f2实际上忽略了f2方法上的Transactional注释。它仍然有效,因为f1也是交易性的。

答案 1 :(得分:1)

在此示例中,除非您在该方法中执行需要访问持久数据的操作,否则您不一定需要@Transactional f1。如果你正在使用Spring的代理AOP设置,那么只有来自另一个类的方法调用才有效,因为代理AOP的工作原理是在所有类的方法周围插入一个包装器对象。如果您使用的是AspectJ,@Transactional建议即使使用private方法也能正常使用。

答案 2 :(得分:0)

通过使用事务传播,您可以实现您想要的任何目标。

http://static.springsource.org/spring/docs/3.0.x/reference/transaction.html#tx-propagation