如何在Spring代理中为私有方法创建@Transactional。

3
这是代码片段。
public class A{

  public void m1(){
    //Do some stuff
    m2();
  }

 @Transactional
 private m2(){
   // Some DB operations
 }
}

在上述代码中,@Transactional没有起作用。
有没有一种方法可以只在私有方法(而不是公共方法)上创建@Transactional
请有人帮忙。

1
在AOP中,你不能使用基于代理的方法来实现这个。如果你想要实现这个功能,你必须使用加载时或编译时织入以及完整的AspectJ。或者,你可以不使用@Transactional,而是在调用m2时使用TransactionTemplate来进行自己的事务管理。 - undefined
1个回答

1

在私有方法上保留@Transactional没有任何意义,因为该方法最终是在类内部调用的。所以代理永远不会应用于该方法。

使用代理时,应仅将@Transactional注解应用于具有公共可见性的方法。如果您对受保护的、私有的或包可见的方法使用@Transactional注解,不会引发错误,但被注解的方法不会展示配置的事务设置。


2
使用情况是这样的,我需要在私有方法上创建 @Transactional。你能否提供一种方法? - undefined
@Transactional你可以添加,但它不会对代码执行产生任何影响,也没有其他方法可以实现。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接