CGLIB(Code Generation Library)

cglib

 编辑

CGLIB(Code Generation Library)是一个开源项目!

是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate支持它来实现PO(Persistent Object 持久化对象)字节码的动态生成。

外文名

Code Generation Library

简    称

cglib

解    释

一个开源项目

概    述

运行期扩展Java类与实现Java接口

目录

  1. CGLIB包的介绍
  2. cglib代码包结构

CGLIB包的介绍

编辑

代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,但它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,该怎么办?现在我们可以使用CGLIB包

CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如Spring AOP和dynaop,为他们提供方法的interception(拦截)。最流行的OR Mapping工具hibernate也使用CGLIB来代理单端single-ended(多对一和一对一)关联(对集合的延迟抓取,是采用其他机制实现的)。EasyMock和jMock是通过使用模仿(mock)对象来测试java代码的包。它们都通过使用CGLIB来为那些没有接口的类创建模仿(mock)对象。

CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。除了CGLIB包,脚本语言例如Groovy和BeanShell,也是使用ASM来生成java的字节码。当然不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。

cglib代码包结构

编辑

  • core (核心代码)

    • EmitUtils

    • ReflectUtils

    • KeyFactory

    • ClassEmitter/CodeEmitter

    • NamingPolicy/DefaultNamingPolicy

    • GeneratorStrategy/DefaultGeneratorStrategy

    • DebuggingClassWriter

    • ClassGenerator/AbstractClassGenerator

  • beans (bean操作类)

    • BeanCopier

    • BulkBean

    • BeanMap

    • ImmutableBean

    • BeanGenerator

  • reflect

    • FastClass

  • proxy

    • MethodInterceptor , Dispatcher, LazyLoader , ProxyRefDispatcher , NoOp , FixedValue , InvocationHandler(提供和jdk proxy的功能)

    • Enhancer

    • CallbackGenerator

    • Callback

    • CallbackFilter

  • util

    • StringSwitcher

    • ParallelSorter

  • transform

猜你喜欢

转载自blog.csdn.net/evilcry2012/article/details/85060975