@Transaction 在自调用的场景下会失效。
本贴最后更新于196天前,其中的信息可能已经水流花落
原因:Spring 的数据库事务的实现原理是 AOP ,而AOP 的原理是动态代理,在自调用的过程中,是类自身的调用,而不是代理对象去调用,那么就不会产生 AOP,这样 Spring 就不能把你的代码植入到约定的流程中。
有两种解决方法:
通过 Spring IOC 容器获取 该Service 的代理对象。通过 代理对象去调用方法把实现写在另一个 Service 中,不要自调用
Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。
858 引用 • 1424 回帖 • 617 关注
Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年5月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。
2921 引用 • 8120 回帖 • 670 关注
2 回帖
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册关于
请输入回帖内容 ...
支持者订阅者
第一种方法,我们一般管它叫做 self-wiring
classFooServiceImplimplementsFooService{@Autowired@LazyprivateFooServiceself;publicvoiddoSomething(){self.doSomethingElse();}publicvoiddoSomethingElse(){// ... }}
1 回复
zh847707713• 6 个月前
作者
多谢回帖,学到了