cglib

cglib

CGLIB(Code Generation Library)是一個開源項目!

是一個強大的,高性能,高質量的Code生成類庫,它可以在運行期擴展Java類與實現Java接口。Hibernate支持它來實現PO(Persistent Object 持久化對象)位元組碼的動態生成。

基本介紹

  • 外文名:Code Generation Library
  • 簡稱:cglib
  • 解釋:一個開源項目
  • 概述:運行期擴展Java類與實現Java接口
CGLIB包的介紹,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

相關詞條

熱門詞條

聯絡我們