首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring和CGLIB有什么区别?

Spring和CGLIB有什么区别?
EN

Stack Overflow用户
提问于 2017-01-05 06:08:52
回答 4查看 4.6K关注 0票数 9

Spring不包含cglib依赖项,cglib和spring都有Enhancer类,一个是net.sf.cglib.proxy.Enhancer类,另一个是org.springframework.cglib.proxy类,它们之间有什么区别?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-05 09:50:29

这称为重新打包:项目不使用某个库作为依赖项,而是将依赖项的副本作为自己项目的一部分,并将其放在不同的包中。

这样做的原因是,使用Spring的项目可能希望使用cglib本身。如果Spring有一个特定版本的cglib作为依赖项,那么使用Spring的项目就不可能选择不同的版本。但是如果Spring使用不同包中的重新打包的cglib,则没有版本冲突,如果他们愿意的话,项目可以使用任何版本的cglib。

一些项目以类似的方式重新打包番石榴、Netty或其他流行的库。

票数 5
EN

Stack Overflow用户

发布于 2017-01-06 08:27:26

正如在此版本的发行说明中提到的那样,Cglib在3.2.0版本中被内联为Spring

在以前的版本中,Spring的基于子类的AOP代理(例如通过proxy-target- class ="true")和@Configuration类支持的用户需要声明对CGLIB 2.2的显式依赖。从SpringFramework3.2开始,我们重新打包并内联了新发布的CGLIB3.0。 这意味着为用户提供了更大的方便,对于正在创建包含invokedynamic指令的类型的子类代理的Java 7用户来说,也意味着正确的功能。在内部重新打包CGLIB可以确保不与其他可能依赖于CGLIB的其他版本的第三方框架发生类路径冲突。

这样做是为了提供与cglib相关的自动更新,并在cglib有时破坏其API时避免版本冲突。

票数 3
EN

Stack Overflow用户

发布于 2017-01-05 07:28:37

弹簧与重新包装的cglib一起发运。您可以在Gradle 构建文件中看到实际的cglib版本。搜索单词"cglib“,你会发现它:

代码语言:javascript
复制
// As of Spring 4.0.3, spring-core includes asm 5.x and repackages cglib 3.2, inlining
// both into the spring-core jar. cglib 3.2 itself depends on asm 5.x and is therefore
// further transformed by the JarJar task to depend on org.springframework.asm; this
// avoids including two different copies of asm unnecessarily.
def cglibVersion = "3.2.4"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41478307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档