實戰CGLIB系列文章之開篇:CGLIB簡介、原理與應用

CGLIB介紹與原理(部分節選自網絡)java

1、什麼是CGLIB?node

CGLIB是一個功能強大,高性能的代碼生成包。它爲沒有實現接口的類提供代理,爲JDK的動態代理提供了很好的補充。一般可使用Java的動態代理建立代理,但當要代理的類沒有實現接口或者爲了更好的性能,CGLIB是一個好的選擇。網絡

關於Java動態代理,請參見個人另外一篇文章:Java動態代理詳解 http://shensy.iteye.com/blog/1698197框架

2、CGLIB原理工具

CGLIB原理:動態生成一個要代理類的子類,子類重寫要代理的類的全部不是final的方法。在子類中採用方法攔截的技術攔截全部父類方法的調用,順勢織入橫切邏輯。它比使用java反射的JDK動態代理要快。性能

CGLIB底層:使用字節碼處理框架ASM,來轉換字節碼並生成新的類。不鼓勵直接使用ASM,由於它要求你必須對JVM內部結構包括class文件的格式和指令集都很熟悉。spa

CGLIB缺點:對於final方法,沒法進行代理。代理

3、CGLIB的應用orm

普遍的被許多AOP的框架使用,例如Spring AOP和dynaop。Hibernate使用CGLIB來代理單端single-ended(多對一和一對一)關聯。blog

4、CGLIB的API

一、Jar包

cglib-nodep-2.2.jar:使用nodep包不須要關聯asm的jar包,jar包內部包含asm的類.

cglib-2.2.jar:使用此jar包須要關聯asm的jar包,不然運行時報錯.

二、CGLIB類庫:

因爲基本代碼不多,學起來有必定的困難,主要是缺乏文檔和示例,這也是CGLIB的一個不足之處

本系列使用的CGLIB版本是2.2

net.sf.cglib.core:底層字節碼處理類,他們大部分與ASM有關係。

net.sf.cglib.transform:編譯期或運行期類和類文件的轉換

net.sf.cglib.proxy:實現建立代理和方法攔截器的類

net.sf.cglib.reflect:實現快速反射和C#風格代理的類

net.sf.cglib.util:集合排序等工具類

net.sf.cglib.beans:JavaBean相關的工具類

 

本實戰系列主要涉及的包:net.sf.cglib.proxy、net.sf.cglib.reflect、net.sf.cglib.util、net.sf.cglib.beans

相關文章
相關標籤/搜索