Spring没有包含cglib依赖项,cglib和spring cglib都有net.sf.cglib.proxy.Enhancer
类,一个是org.springframework.cglib.proxy
而另一个是
<a href="path://text?Text to share">Share to path</a>
,是什么?他们之间的区别?
答案 0 :(得分:3)
这称为重新打包:项目不是将某个库用作依赖项,而是将依赖项的副本作为其自己项目的一部分,并将其放在不同的包中。
这样做的原因是使用Spring的项目可能想要使用cglib本身。如果Spring将特定版本的cglib作为依赖项,那么使用Spring的项目就不可能选择不同的版本。但是如果Spring使用不同包中的重新打包的cglib,则没有版本冲突,如果他们喜欢,项目可以使用任何版本的cglib。
有些项目以类似的方式重新打包Guava,Netty或其他流行的图书馆。
答案 1 :(得分:3)
Cglib在版本3.2.0中被内联到Spring中,正如release notes of this version中提到的那样:
在以前的版本中,Spring的基于子类的AOP代理的用户(例如 通过proxy-target-class =&#34; true&#34;)和@Configuration类支持 需要声明对CGLIB 2.2的显式依赖。截至春天 框架3.2,我们现在重新打包并内联新发布的CGLIB 3.0。
这意味着用户更方便,也更正确 正在创建子类代理的Java 7用户的功能 包含invokedynamic字节码指令的类型。重新包装 CGLIB内部确保没有类路径与其他第三方冲突 框架可能依赖于其他版本的CGLIB。
这样做是为了提供与cglib相关的自动更新,并避免版本冲突,因为cglib有时会破坏其API。
答案 2 :(得分:2)
Spring附带重新打包的cglib。您可以在Gradle buildfile中查看实际的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"
答案 3 :(得分:0)
没什么区别,只是重新包装
ps。 class ObjenesisCglibAopProxy extends CglibAopProxy
Objenesis aims to overcome these restrictions by bypassing the constructor on object instantiation.