如何解决为什么 Spring AOP 使用 JDK 动态代理?
我知道 Spring AOP 使用 JDK 动态代理和 CGLIB。
目标实现接口时 -> JDK 动态代理
else -> CGLIB。
大家可以看到为什么在过去的版本中会有这个原因,CGLIB目前的所有缺点都得到了保护,并且在性能方面优于JDK方法。
为什么您仍然将 JDK 用于实现该接口的目标?把所有的目标都做成CGLIB似乎更有优势。
解决方法
将我的评论转换为答案...
用户 R.G 说:
此 SO Q&A 提供了有关该主题的大量见解。
接受的答案不是很有帮助,但Rafael在他自己的评论下answer解释了它:“Cglib是一个外部依赖(...)依赖第三方软件总是一场赌博,所以最好是尽可能少的人依赖它。” 也就是说,如果你有一个设计非常干净的 Spring 应用程序,总是针对接口而不是直接针对类进行编程,那么你根本不需要 CGLIB。
有点跑题,但仅供参考:出于类似的原因,Spock 测试框架为只需要接口模拟的用户提供开箱即用的 JDK 接口代理。在这种情况下,可选的依赖项 CGLIB(或 ByteBuddy)和像 Objenesis 这样的特殊东西是不必要的。所以,这种策略很常见。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。