spring 事务是 jdk 动态代理还是 cglib 字节码织入?

2020 年 5 月 1 日
 zxc1234

如题,请教 还是两者都有,分情况?

3709 次点击
所在节点    程序员
9 条回复
chendy
2020 年 5 月 1 日
不需要接口就能用
那当然是 cglib 了
ErrorMan
2020 年 5 月 1 日
两种模式都支持,默认实现是 jdk 好像?
pikaconan
2020 年 5 月 1 日
https://snailclimb.gitee.io/javaguide-interview/#/./docs/e-1spring

Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib
BBCCBB
2020 年 5 月 1 日
jdk 动态代理和 cglib 都是用来生成代理类..

里面的 interceptor 执行都是一个责任链的模式..
nicklooo
2020 年 5 月 1 日
@luhe 补充一点,与 spring-context 不同,SpringBoot 默认都使用 cglib 。默认开启 cglib 的属性应该是 @EnableAspectJAutoProxy 里的 proxyTargetClass 。
xizismile
2020 年 5 月 1 日
1.spring 默认使用的是 jdk 动态代理
2.如果要被代理的类没有实现任何接口 或者 配置了 proxyTargetClass 属性为 cglib 代理,才会去使用 cglib 代理
xizismile
2020 年 5 月 1 日
多说一些,一般这些详细的知识点在 spring 的官方文档里面都有,建议有疑惑的时候先看看官方文档,我上面的回答也是从官方文档里翻译出来的
Aresxue
2020 年 5 月 2 日
spring5 默认 jdk, spring boot2 默认 cglib
hantsy
2020 年 5 月 2 日
这些说运行时代理吧,Spring 支持三种 weaving 方式,runtime, loading time, compiling time. AspectJ 可以实现 compiling time weaving, 将代理类什么的,先在编译的时候生成一堆 Classes 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/667970

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX