“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection(反射)
CGLIB(Code Generation Library)是一个开源项目!
是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO(Persistant Object 持久化对象)字节码的动态生成。
JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,但它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,该怎么办?现在我们可以使用CGLIB包
CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如Spring AOP,最流行的OR Mapping工具hibernate也使用CGLIB来代理单端single-ended(多对一和一对一)关联。EasyMock和jMock是通过使用模仿(moke)对象来测试java代码的包。它们都通过使用CGLIB来为那些没有接口的类创建模仿(moke)对象。
CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。除了CGLIB包,脚本语言例如Groovy和BeanShell,也是使用ASM来生成java的字节码。当然不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。
http://www.blogjava.net/stone2083/archive/2008/03/16/186615.html
- 大小: 14 KB
分享到:
相关推荐
ASM提供了底层的字节码操作能力,而CGlib则在其上构建了一个更易于使用的API,使得开发者无需直接与ASM的复杂接口打交道,就能实现类的动态扩展和代理。CGlib封装了ASM的一些细节,提供了更高级别的抽象,使得开发者...
**Cglib与ASM的关系** 虽然Cglib可以独立工作,但它内部使用了ASM库来进行底层的字节码操作。Cglib为开发者提供了更高级别的抽象,使得字节码操作更加简便,而ASM则提供了更为底层和灵活的字节码生成和分析功能。...
在实际项目中,为了确保兼容性和稳定性,选择与cglib相匹配的asm版本是非常重要的。例如,这里提到的`cglib-2.1.3.jar`可能需要特定版本的`asm.jar`,具体版本需求应该根据cglib的官方文档或者项目依赖管理工具(如...
因为在cglib简单使用的时候,和asm因为兼容问题运行老是失败。比如提示java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(I)V 之类的乱七八糟的错误。最后通过使用正确的配套的版本使得程序成功运行。
本套"匹配的cglib和asm包"正是为了解决这个问题。它包含了已经经过验证的CGILib和ASM的兼容版本,确保在使用CGILib时不会出现由于版本不匹配导致的错误。这为开发者提供了一个方便的解决方案,避免了在寻找和测试...
cglib-2.2.2.jar和asm-3.3.jar,使用Cglib需要的jar包。
Cglib和ASM是Java开发中的两个重要库,它们在处理动态代码生成和字节码操作方面发挥着关键作用。这两个库通常与AOP(面向切面编程)框架如Spring密切相关,同时也被广泛用于性能优化、测试工具以及模拟对象的创建。 ...
CGLIB是一个强大的高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。它广泛用于许多开源项目,例如Spring框架,它使用CGLIB来实现AOP代理。当被代理的目标类没有实现接口时,Spring会默认选择使用CGLIB...
Cglib是一个强大的、高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。它广泛用于各种框架,如Spring AOP、Hibernate等,用来生成代理对象。Cglib通过继承目标类来创建代理,因此对于没有接口的类,...
这里提到的"cglib-3.3.0.jar"和"asm-7.0.jar"是两个与Java动态代理密切相关的库。 首先,`cglib-3.3.0.jar`是Code Generation Library的简称,它是一个强大的高性能的代码生成库,广泛用于Java AOP(面向切面编程)...
cglib包及依赖汉cglib3.1和asm4.2,主要作用是用户代理,代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。...
jdk动态代理是由Java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的。总的来说,反射机制在生成类的过程中比较高效,而asm在生成类之后的相关执行过程中比较高效(可以通过将asm生成的类进行缓存,...
cglib代理,若代理过程中报java.lang.ClassNotFoundException: org.objectweb.asm.Type错说明缺少该jar包
CGLib利用ASM的强大功能,将其封装成更易于使用的API,使得开发者无需直接与ASM打交道就能实现复杂的字节码操作。 动态代理是一种编程模式,它允许在运行时为对象创建代理,以便在调用实际方法之前或之后添加额外的...
CGLIB全称为Code Generation Library,它是一个强大的高性能的代码生成库,主要用于扩展Java类与实现Java接口。当目标类不支持代理(如final类或没有接口的类)时,JDK的动态代理就无法工作,这时CGLIB就派上用场了...
ASM 和 CGLIB 是在Java开发中常用的两个库,它们主要与字节码操作和动态代理技术相关。这里我们将深入探讨这两个库的核心概念、功能以及它们在实际开发中的应用。 **ASM 库** ASM 是一个Java字节码操控和分析框架...
CGLIB是一个强大的高性能的代码生成库,它在运行期扩展Java类与实现Java接口。它被广泛应用在许多开源项目中,如Spring框架,当目标类不支持代理(例如,没有接口)时,Spring会使用CGLIB来创建代理对象。CGLIB通过...
CGLIB是通过字节码技术实现的,而字节码技术的核心库就是ASM。 ASM是一个Java字节码操控和分析框架,它可以直接生成和修改Java类的字节码,为开发者提供了底层的Java字节码操作能力。ASM-2.2.3是ASM的一个版本,...
CGLIB是一个强大的高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。当目标类没有实现接口时,CGLIB是一个很好的选择。CGLIB通过字节码技术生成一个子类来实现代理,因此对类的代理效率较高。CGLIB使用...