【发布时间】:2021-12-07 10:12:11
【问题描述】:
我想我对 Spring 如何使用带有 @Transactional 注释的代理概念有一个很好的了解,但我找不到任何关于“默认”实现的信息。基本上我正在寻找的是包装原始方法调用的代码(来自包装对象的方法)。
【问题讨论】:
标签: spring spring-transactions cglib
我想我对 Spring 如何使用带有 @Transactional 注释的代理概念有一个很好的了解,但我找不到任何关于“默认”实现的信息。基本上我正在寻找的是包装原始方法调用的代码(来自包装对象的方法)。
【问题讨论】:
标签: spring spring-transactions cglib
没有默认实现这样的东西,因为它完全取决于实现您添加@Transactional 注解的方法的类。
如果该类继承自接口,则将使用 JDK Dynamic Proxy。
如果没有,那么将使用一个名为 CGLIB 的外部库来创建代理。
动态代理将创建一个代理来实现您的目标类也实现的所有接口,而 CGLIB 将创建一个扩展您的目标类的代理。
还请务必阅读此SO question,了解动态代理和 CGLIB 代理之间的区别,因为它也包含有价值的信息。
【讨论】: