【问题标题】:why spring AOP use JDK Dynamic proxy?为什么spring AOP使用JDK动态代理?
【发布时间】:2021-09-28 11:31:57
【问题描述】:

我知道 Spring AOP 使用 JDK 动态代理和 CGLIB。

当目标实现接口时 -> JDK动态代理

else -> CGLIB。

如您所见,为什么在过去的版本中会出现这个原因,CGLIB 目前已经解决了所有缺点,并且在性能方面优于 JDK 方法。

为什么你仍然使用 JDK 作为实现接口的目标呢?使所有目标CGLIB似乎更有优势。

【问题讨论】:

标签: proxy aop spring-aop cglib


【解决方案1】:

将我的 cmets 转换为答案...

用户 R.G 说:

此 SO Q&A 提供了有关该主题的大量见解。

接受的答案不是很有帮助,但是 Rafael 在他自己的answer 下的评论解释了它:“Cglib 是一个外部依赖项(...)依赖第三方软件总是一场赌博,所以它尽可能少的人依赖它是最好的。”也就是说,如果你有一个设计非常简洁的 Spring 应用程序,总是针对接口而不是直接针对类进行编程,那么你根本不需要 CGLIB。 p>

有点离题,但仅供参考:出于类似原因,Spock 测试框架支持开箱即用的 JDK 接口代理,供只需要接口模拟的用户使用。在这种情况下,不需要可选的依赖项 CGLIB(或 ByteBuddy)和像 Objenesis 这样的特殊东西。所以,这种策略相当普遍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2012-05-26
    • 2019-10-30
    相关资源
    最近更新 更多