教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓實戰(zhàn)教程之spring的AOP底層實現(xiàn)介紹

更新時間:2015年12月29日13時31分 來源:傳智播客Java培訓學院 瀏覽次數(shù):

JDK動態(tài)代理

Jdk1.3引入了動態(tài)代理技術,它要求要目標類必須實現(xiàn)接口,簡單說,jdk實現(xiàn)的動態(tài)代理只能針對于實現(xiàn)接口的類的對象創(chuàng)建代理。
java.lang.reflect.Proxy類提供了創(chuàng)建對象代理對象的方法
代碼實現(xiàn)
創(chuàng)建目標類
創(chuàng)建代理工廠類
測試操作

Cglib動態(tài)代理

JDK的動態(tài)代理用起來非常簡單,但它有一個限制,就是使用動態(tài)代理的對象必須實現(xiàn)一個或多個接口。如果想代理沒有實現(xiàn)接口的繼承的類,該怎么辦?現(xiàn)在我們可以使用CGLIB
CGLIB(Code Generation Library)是一個開源項目!
是一個強大的,高性能,高質量的Code生成類庫,它可以在運行期擴展Java類與實現(xiàn)Java接口
如果我們獨立使用cglib,我們需要單獨導入cglib的jar包,而在spring的高版本中,已經(jīng)引入了cglib的包,所以不需要在單獨導入。(內置在spring-core包中)
注意:如果單獨使用cglib,還需要引入一個asm包。原因:CGLIB包的底層是通過使用一個小而快的字節(jié)碼處理框架ASM,來轉換字節(jié)碼并生成新的類。
目標類
使用cglib創(chuàng)建代理工廠
測試代碼
注意:在spring的底層AOP實現(xiàn),默認提供jdk動態(tài)代理與cglib動態(tài)代理。
問題:spring底層到底使用哪種代理?
  1. 如果目標類實現(xiàn)了接口,優(yōu)先使用jdk動態(tài)代理
  2. 如果目標類無接口實現(xiàn),使用cglib動態(tài)代理
  本文版權歸傳智播客Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://metathetuscanyresort.com/javaee

0 分享到:
和我們在線交談!