程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Spring @Transactional属性可以在私有方法上工作吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Spring @transactional属性可以在私有方法上工作吗??

开发过程中遇到Spring @transactional属性可以在私有方法上工作吗?的问题如何解决?下面主要结合日常开发的经验,给出你关于Spring @transactional属性可以在私有方法上工作吗?的解决方法建议,希望对你解决Spring @transactional属性可以在私有方法上工作吗?有所启发或帮助;

问题不是私有的还是公共的,问题是:如何调用它以及你使用哪种AOP实现!

如果你使用(默认)Spring Proxy AOP,则@transational@H_675_6@仅当调用通过代理时,才会虑Spring提供的所有AOP功能(如)。-如果从另一个 bean 调用带注释的方法,通常就是这种情况。

这有两个含义:

  • 因为不能从另一个bean调用私有方法(例外是反射),@transactional@H_675_6@所以不虑其注释。
  • 如果该方法是公共方法,但是从同一个bean调用,则也不会虑该方法(仅当使用(默认)Spring Proxy AOP时,此语句才是正确的)。

恕我直言,你应该使用AspectJ模式而不是Spring ProxIEs来解决问题。而且AspectJ事务性方面甚至被编织成私有方法(已在Spring 3.0中进行了检查)。

你的问题的答案是否定的- @transactional@H_675_6@如果用于注释私有方法,则将无效。代理生成器将忽略它们。

在Spring手册10.5.6章中有记录:

方法可见性和 @transactional

使用代理时,应仅将@transactional@H_675_6@注释应用于具有公共可见性的方法。如果使用注释对受保护的,私有的或程序包可见的方法进行 @transactional@H_675_6@注释,则不会引发任何错误,但是带注释的方法不会显示已配置的事务设置。如果需要注释非公共方法,请虑使用AspectJ(请参见下文)。

解决方法

如果我在Spring bean的私有方法上有一个@transactional -Annotation,该注释有什么作用吗?

如果@transactional@H_675_6@注释位于公共方法上,则它将起作用并打开一个事务。

public class Bean {
  public void dostuff() {
     doprivatestuff();
  }
  @transactional
  private void doprivatestuff() {

  }
}

...

Bean bean = (Bean)appContext.getBean("bean");
bean.dostuff();
@H_675_6@

大佬总结

以上是大佬教程为你收集整理的Spring @Transactional属性可以在私有方法上工作吗?全部内容,希望文章能够帮你解决Spring @Transactional属性可以在私有方法上工作吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。