Spring不包含cglib依赖项,cglib和spring都有Enhancer类,一个是net.sf.cglib.proxy.Enhancer类,另一个是org.springframework.cglib.proxy类,它们之间有什么区别?
发布于 2017-01-05 09:50:29
这称为重新打包:项目不使用某个库作为依赖项,而是将依赖项的副本作为自己项目的一部分,并将其放在不同的包中。
这样做的原因是,使用Spring的项目可能希望使用cglib本身。如果Spring有一个特定版本的cglib作为依赖项,那么使用Spring的项目就不可能选择不同的版本。但是如果Spring使用不同包中的重新打包的cglib,则没有版本冲突,如果他们愿意的话,项目可以使用任何版本的cglib。
一些项目以类似的方式重新打包番石榴、Netty或其他流行的库。
发布于 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时避免版本冲突。
发布于 2017-01-05 07:28:37
弹簧与重新包装的cglib一起发运。您可以在Gradle 构建文件中看到实际的cglib版本。搜索单词"cglib“,你会发现它:
// 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"https://stackoverflow.com/questions/41478307
复制相似问题