2者实现原理都是什么,有什么区别

解决方案 »

  1.   

    cglib是一个开源项目,它的实现肯定是用反射的了,肯定要比反射用起来方便,
      

  2.   

    cglib 依赖 asm. asm 操作 字节码
    <dependencies>
        <dependency>
          <groupId>asm</groupId>
          <artifactId>asm</artifactId>
          <version>3.3.1</version>
        </dependency>

        <dependency>
          <groupId>asm</groupId>
          <artifactId>asm-util</artifactId>
          <version>3.3.1</version>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>ant</groupId>
          <artifactId>ant</artifactId>
          <version>1.6.2</version>
          <optional>true</optional>
        </dependency>
      </dependencies>
      

  3.   

    反射没有用第三方类库。而ASM是第三方类库。
    反射最主要的用法是在已有的类上,以动态的方式执行动作。
    ASM的主要用途是用之来增强已有的类,在运行时为某类生成子类。子类构建的时候,利用ASM比较方便,减少出错。
      

  4.   

    反射是读取持久堆上存储的类信息。而 ASM 是直接处理 .class 字节码的小工具(工具虽小,但是功能非常强大!)
      

  5.   

    反射只能读取类信息,而 ASM 除了读还能写。反射读取类信息时需要进行类加载处理,而 ASM 则不需要将类加载到内存中。反射相对于 ASM 来说使用方便,想直接操纵 ASM 的话需要有 JVM 指令基础。