spring – 使用静态方法的@Transactional
为什么我们不能使用@Transactional静态方法来管理我的Spring项目中的事务? @Transactional适用于非静态方法,但不适用于任何特定原因的静态方法? 最佳答案
为了理解为什么你提出的东西不起作用,你必须首先从高层次上理解Spring如何处理使用@Transactional的bean.
当您将方法或类注释为@Transactional并使其成为Spring Bean时,Spring有效地为该类创建代理(使用JDK动态代理或CGLIB代理).这意味着无论何时使用您的类(来自Spring托管代码),都不是您的代码立即被调用,而是首先执行所需操作的代理,然后调用您的代码(在缓存支持的情况下)甚至可能根本不会调用代码. 考虑到这一点,不支持静态的原因变得清晰. 支持这样的特性需要改变调用代码的字节码,因为调用静态方法是通过字节码中的invokestatic实现的,该方法对目标方法进行硬编码. Spring文档的This部分详细介绍了Spring AOP (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |