`

cglib和asm相关的文章

阅读更多

 

cglib和asm相关的文章

    温故了一个cglib和asm,找到几篇写得比较好,介绍得比较清楚的文章:

    1、CGlib简单介绍,访问地址:http://www.blogjava.net/stone2083/archive/2008/03/16/186615.html,从简单的示例到不同业务场景的变化,一步步让读者明白,为什么要使用cglib以及哪种场景下需要使用cglib;

    2、cglib源码学习交流,访问地址:http://www.iteye.com/topic/799827,作者agapple的cglib源码阅读记录,有对和个类的介绍说明,也有部分示例;

    3、cglib相关性能测试对比,访问地址:http://www.iteye.com/topic/801577,也是agapple写的,其中需要关注的就是作者提到的BeanCopier与BeanUtils做copy的时候的性能差异很大;

    4、AOP 的利器:ASM 3.0 介绍,访问地址:http://www.ibm.com/developerworks/cn/java/j-lo-asm30/,虽然是写字节码的,但是读下来不会让人感到枯燥,作者先以示例为铺垫,一步步的深入,并比较了示例在现有的逻辑基础之上增加验权的的几种实现方式。其中有介绍使用装饰模式(Decorator),指出了使用装饰模式的可能代码改动量比较大的问题;使用Proxy方式,不过这种方式可能会有性能问题;最终才引出ASM,指出asm是直接生成class类的方式,不会有性能问题,以下两句话可以说明:

    Proxy 毕竟是通过反射实现的,必须在效率上付出代价:有实验数据表明,调用反射比一般的函数开销至少要大 10 倍。而且,从程序实现上可以看出,对 proxy class 的所有方法调用都要通过使用反射的 invoke 方法。因此,对于性能关键的应用,使用 proxy class 是需要精心考虑的,以避免反射成为整个应用的瓶颈。
    ASM 能够通过改造既有类,直接生成需要的代码。增强的代码是硬编码在新生成的类文件内部的,没有反射带来性能上的付出。同时,ASM 与 Proxy 编程不同,不需要为增强代码而新定义一个接口,生成的代码可以覆盖原来的类,或者是原始类的子类。它是一个普通的 Java 类而不是 proxy 类,甚至可以在应用程序的类框架中拥有自己的位置,派生自己的子类。

分享到:
评论

相关推荐

    cglib.jar和asm.jar

    CGlib和ASM是两个在Java开发中至关重要的库,尤其在动态代理和字节码操作领域。本篇文章将深入探讨这两个库以及它们在代理模式中的应用。 首先,CGlib(Code Generation Library)是一个强大的高性能的代码生成库,...

    cglib动态代理所需jar包 cglib2.2,asm3.3.jar

    不导入asm.jar会出现Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type报错,参考文章: http://blog.csdn.net/xujingcheng123/article/details/79030216

    cglib 源代码分析(原创)

    这篇原创文章“CGlib源代码分析”旨在深入探讨CGlib的工作原理和内部机制,帮助开发者更好地理解和利用这个工具。 首先,CGlib的核心功能是通过字节码技术动态生成类的子类。在Java中,由于语言设计的原因,我们...

    cglib.jar/cglib-nodep.jar免费下载

    在本篇文章中,我们将深入探讨CGLib的核心概念、用途以及如何使用。 **1. CGLib的基本原理** CGLib通过字节码操作技术来实现其功能。它不是直接修改已有的.class文件,而是基于ASM库在运行时生成新的字节码,从而...

    浅谈JDK动态代理与CGLIB代理去区别

    本篇文章将深入探讨JDK动态代理和CGLIB代理的区别,以及它们在实际应用中的选择。 首先,JDK动态代理主要依赖于java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。Proxy类用于创建一个代理对象...

    Java 动态代理和Cglib代理(二)

    本篇文章将深入探讨这两种代理机制,尤其是Cglib代理。 首先,Java的动态代理基于Java的反射API实现,主要用于接口代理。当目标对象实现了至少一个接口时,我们可以使用`java.lang.reflect.Proxy`类来创建代理对象...

    cglib(个人文章测试可用包)

    5. **代码分析**:ASM和CGLib可以用于静态代码分析,检查代码质量,查找潜在的问题,或者进行代码混淆。 **使用注意事项** 虽然CGLib提供了一种强大的方式来扩展Java类,但它也有一定的局限性: 1. **效率问题**...

    CGLib小练习题

    CGLib,全称为Code Generation Library,是一款Java平台上的代码生成库,...通过阅读和实践CGLib相关的博客文章,如给出的链接(可能需要登录访问),我们可以深入学习其工作原理和最佳实践,提高自己的Java编程技能。

    spring-aop.zip

    aspectjtools.jar和aspectjweaver.jar提供了AspectJ的完整支持,而CGLIB和ASM则在缺少Java代理时作为备用的代理生成工具。aopalliance.jar确保了Spring AOP与其他AOP框架的兼容性。这些组件共同构建了一个强大的AOP...

    spring AOP依赖的三个jar包.zip

    总结来说,Spring AOP的三个核心JAR包——spring-aop.jar、asm-all.jar和cglib-nodep.jar,共同构建了Spring的面向切面编程功能。它们使得开发者可以专注于业务逻辑,而将横切关注点如日志、事务管理等分离出来,...

    hibernate3-jar

    本篇文章将深入探讨Hibernate3及其相关依赖库,帮助读者理解并掌握这一核心组件。 首先,`hibernate3.jar`是Hibernate3的核心库,包含了所有必要的类和接口,如SessionFactory、Session、Query等,以及用于配置和...

    四、Spring源码分析——动态代理

    CGLIB是通过ASM库在运行时动态生成字节码来创建代理类的。 3. **AOP代理的理解** 在Spring AOP中,动态代理用于创建一个代理对象,该对象可以在调用目标对象方法之前和之后执行自定义的行为,即“切面”。切面可以...

    spring依赖注入的实现原理

    本篇文章将深入探讨Spring依赖注入的实现原理,以及如何通过源码理解和使用这一特性。 一、依赖注入简介 依赖注入的基本思想是,对象不应该负责创建或查找它所依赖的对象,而应该由外部容器(如Spring框架)来负责...

    今天决定介绍一下et-mvc

    本篇文章将深入探讨 `et-mvc` 的核心概念、工作原理以及如何整合其他开源工具,如 `pagination.css`、`cglib-2` 和 `asm.jar`。 ### 1. et-mvc 框架基础 `et-mvc` 框架的核心在于它的请求处理机制。它通过拦截 ...

    利用反射技术实现POJO值拷贝

    在大规模或高性能场景下,可能需要考虑其他优化策略,如使用CGLIB或ASM这样的字节码库进行更底层的优化,或者使用Apache Commons BeanUtils或Spring的`BeanUtils.copyProperties`等成熟库,这些库已经对反射进行了...

    Dwr2+Struts2+Spring2.5+Hibernate3实战——用户登录注册系统

    此外,文章还列举了项目中必需的Jar文件,包括antlr、asm、aspectjweaver、cglib和commons-collections等,这些库对于项目的正常运行至关重要。 综上所述,这篇实战指南详细介绍了如何利用Dwr2、Struts2、Spring2.5...

    整合SSH(登录示例)

    在整合过程中,可能会遇到一些包冲突,如asm.jar、asm-attrs.jar和cglib-2.1.3.jar。解决方法是:在项目属性的Java Build Path下,移除这些冲突的Jar包。 ### 6. 添加Struts2.0 最后,添加Struts2.1框架。选择所需...

    jdk 5 instrument学习

    这个接口允许我们对Java应用程序进行细粒度的干预,包括在类装载阶段对字节码进行修改,以及获取有关类和对象的信息。 ### 2. 类加载前的字节码修改 Instrumentation的主要功能之一是在类被JVM加载之前对其进行...

    说说MVC中的模型绑定问题

    `et-mvc.jar`和`et-ar.jar`可能是自定义的MVC框架或者扩展库,`cglib-2.1.3.jar`是代码生成库,常用于动态代理和AOP(面向切面编程),可能用于实现模型绑定的拦截器或动态代理。`asm.jar`和`paranamer-1.3.jar`则是...

    android热修复工程1

    - **字节码插桩**:通过ASM、CGLIB等字节码库,动态修改Dalvik字节码或ART字节码,实现方法的替换或插入,从而达到修复目的。 - **数据结构修复**:对于数据结构破坏导致的问题,可能需要在运行时动态调整数据结构...

Global site tag (gtag.js) - Google Analytics