spring– 使用静态方法的@Transactional

spring– 使用静态方法的@Transactional,第1张

概述为什么我们不能使用@Transactional静态方法来管理我的Spring项目中的事务?@Transactional适用于非静态方法,但不适用于任何特定原因的静态方法?最佳答案为了理解为什么你提出的东西不起作用,你必须首先从高层次上理解Spring如何处理使用@Transactional的bean.当您将方法或类注释为@Transactional并使其成为

为什么我们不能使用@Transactional静态方法来管理我的Spring项目中的事务?

@Transactional适用于非静态方法,但不适用于任何特定原因的静态方法?

最佳答案为了理解为什么你提出的东西不起作用,你必须首先从高层次上理解Spring如何处理使用@Transactional的bean.

当您将方法或类注释为@Transactional并使其成为Spring Bean时,Spring有效地为该类创建代理(使用JDK动态代理或cglib代理).这意味着无论何时使用您的类(来自Spring托管代码),都不是您的代码立即被调用,而是首先执行所需 *** 作的代理,然后调用您的代码(在缓存支持的情况下)甚至可能根本不会调用代码.
这里要记住的一个关键是调用代码(如果你愿意,调用站点)根本不会改变,并且JVM使用相同的字节码调用所需的目标方法(代理方法)(invokevirtual)或调用接口).

考虑到这一点,不支持静态的原因变得清晰.
您无法为静态方法创建代理!当然Java Dynamic ProxIEs不能这样做,cglib也不能.

支持这样的特性需要改变调用代码的字节码,因为调用静态方法是通过字节码中的invokestatic实现的,该方法对目标方法进行硬编码.

Spring文档的This部分详细介绍了Spring AOP 总结

以上是内存溢出为你收集整理的spring – 使用静态方法的@Transactional全部内容,希望文章能够帮你解决spring – 使用静态方法的@Transactional所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1265204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存