日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Java Cglib動態代理

瀏覽:6日期:2022-08-26 18:13:39

今天來介紹另一種更為強大的代理——Cglib動態代理。

什么是Cglib動態代理?

我們先回顧一下上一篇的jdk動態代理,jdk動態代理是通過接口來在運行時動態創建委托類的代理對象,但是跟靜態代理一樣有一個缺點,就是必須和委托類實現相同的接口,當接口數量增加時,便需要增加代理類的數量才能滿足需求,而且如果委托類是別人寫的,而且沒有實現任何接口,那么jdk動態代理就有些力不從心了。

這時候Cglib動態代理就脫穎而出了,Cglib并不依賴接口,可以直接生成委托類的代理對象,而且可以代理委托類的任意非final修飾的public和protected方法,我們可以先來看一個栗子。

先定義一個Programmer類:

public class Programmer { private String name; public void setName(String name) { System.out.println('Setting Name.'); this.name = name; }public void code(){ System.out.println(name + ' is writing bugs.'); }}

然后定義一個代理類:

public class ProgrammerProxy implements MethodInterceptor { /** * 內部持有委托類對象的引用 */ private Object target; /** * 創建代理類對象 */ public Programmer createProxy(Programmer object){ target = object; //創建Enhancer對象 Enhancer enhancer = new Enhancer(); //設置要代理的目標類,以擴展功能 enhancer.setSuperclass(this.target.getClass()); //設置單一回調對象,在回調中攔截對目標方法的調用 enhancer.setCallback(this); //設置類加載器 enhancer.setClassLoader(object.getClass().getClassLoader()); //創建代理對象 return (Programmer)enhancer.create(); } /** * 回調方法:在代理實例上攔截并處理目標方法的調用,返回結果 * @param proxy 代理類 * @param method 被代理的方法 * @param params 該方法的參數數組 * @param methodProxy */ @Override public Object intercept(Object proxy, Method method, Object[] params, MethodProxy methodProxy) throws Throwable { //調用之前處理 doBefore(); //調用原方法 method.invoke(target,params); //調用之后處理 doAfter(); return null; } private void doAfter() { System.out.println('do after.'); } private void doBefore() { System.out.println('do before.'); }}

然后測試一下:

public class ProxyTest { @Test public void testCglibProxy(){ //創建一個Programmer對象 Programmer programmerA = new Programmer(); programmerA.setName('Frank'); //創建代理對象 Programmer programmerProxyA = new ProgrammerProxy().createProxy(programmerA); programmerProxyA.code(); //修改代理對象 programmerProxyA.setName('Wang'); programmerProxyA.code(); //修改委托類對象 programmerA.setName('Song'); programmerProxyA.code(); }}

輸出如下:

Setting Name.do before.Frank is writing bugs.do after.do before.Setting Name.do after.do before.Wang is writing bugs.do after.Setting Name.do before.Song is writing bugs.do after.

Cglib實現動態代理的步驟也不是很麻煩,先創建一個類實現MethodInterceptor接口,重寫intercept方法,在intercep中可以截獲委托類的所有非final修飾的public和protected方法,上例中,method.invoke(target,params);即為調用原對象的原方法,在代理類中保存了委托類對象的引用,這一點跟JDK動態代理是一樣的。在調用原方法前先調用了doBefore方法,調用之后還調用了doAfter方法,從而實現了代理功能。至于createProxy方法,也只是一個固定步驟,先創建Enhance對象,然后將委托類的一些屬性往里塞,然后調用create方法來動態生成代理對象。

在測試類中,為了更明顯的說明代理類與委托類的關系,分別用代理類對象programmerProxyA和委托類對象programmerA對name字段進行修改,可以產生一樣的效果。

下面來對比一下Cglib動態代理與JDK動態代理:

1.兩者都是動態代理,都是運行時動態生成代理對象。

2.JDK動態代理利用的是接口信息來實現的代理,委托類必須實現某個或者某些接口,而Cglib則是利用繼承關系,利用asm在運行時動態生成委托類的子類,從而實現對委托類的代理。因此不依賴接口。

3.Cglib由于是利用繼承關系來實現代理的,因此無法代理被final修飾的類以及被final修飾的方法。

4.Cglib一般來說效率要比JDK動態代理效率更高,可以實現的代理也更為強大。

當然,具體情況具體分析,雖然Cglib比Jdk動態代理更強大,但并不一定各個地方都強行使用,有時候JDK動態代理相對來說更加簡單粗暴。

至此,本篇完結,代理相關內容講解完畢,歡迎大家繼續關注。

jar包下載地址:https://www.jb51.net/softs/570453.html

以上就是詳解Java Cglib動態代理的詳細內容,更多關于Java Cglib動態代理的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品福利久久久| 成人午夜网址| 99久久久久国产精品| 欧美男人天堂| 久久国产影院| 蜜桃视频欧美| 欧美日韩免费观看一区=区三区| 999久久久91| 亚洲不卡av不卡一区二区| 日韩中文欧美| 亚洲精品小说| 日韩在线一二三区| 日本不卡一二三区黄网| 欧美在线黄色| 老司机精品视频网| 麻豆极品一区二区三区| 国产精品毛片一区二区在线看| 日韩一区电影| 在线综合亚洲| 日韩精品成人在线观看| 国产午夜久久av| 成人国产精品一区二区免费麻豆| 日本蜜桃在线观看视频| 欧美一区二区性| 免费久久99精品国产自在现线| 亚洲男人在线| 九九99久久精品在免费线bt| 久久男女视频| 亚洲最大av| 欧美精品91| 人人草在线视频| 蜜桃视频一区二区三区在线观看| 日韩高清电影免费| 国产盗摄——sm在线视频| 精品一区在线| 青草国产精品| av资源亚洲| 亚洲免费网址| 国产一卡不卡| 欧美sss在线视频| 欧美久久久网站| 午夜精品久久久久久久久久蜜桃| 国产亚洲一区在线| 国产精久久一区二区| 久久九九精品| 亚洲日韩视频| 麻豆国产在线| 一区二区三区国产盗摄| 国产一区国产二区国产三区| 在线国产一区| 美女性感视频久久| 国产亚洲精品久久久久婷婷瑜伽| 国产精品视频首页| 欧美~级网站不卡| 国产精一区二区| 欧美1区2区3区| 国产精品高清一区二区| 好吊日精品视频| 国产精品分类| 美女尤物久久精品| 里番精品3d一二三区| 免费日韩av| 中文字幕在线高清| 日韩成人一级| 欧美福利一区| 另类综合日韩欧美亚洲| 国产欧美一区二区三区精品酒店| 三级久久三级久久久| 国产日韩电影| 国产欧美日韩在线观看视频| 欧美va天堂在线| 久久精品亚洲一区二区| 三级欧美在线一区| 久久九九精品| 精品视频网站| 视频一区中文字幕| 欧美日韩视频网站| 国产精品一卡| 综合国产在线| 亚洲一级黄色| 精品国产网站| 911亚洲精品| 亚洲一区不卡| 91精品亚洲| 精品日韩一区| 欧美日本精品| 亚洲久久一区| 国产视频久久| 国产韩日影视精品| 色综合狠狠操| 久久狠狠久久| 一区二区电影在线观看| 黄色成人精品网站| 中文另类视频| 最近高清中文在线字幕在线观看1| 国产美女视频一区二区| 亚洲精品黄色| 免费成人在线影院| 日韩视频一区| 成人av二区| 激情综合网五月| 久久精品1区| 日韩中文在线电影| 在线精品亚洲欧美日韩国产| 免费观看亚洲天堂| 欧美日韩一区二区高清| 日韩激情视频网站| 亚洲精品美女91| 日韩精品一卡二卡三卡四卡无卡| 美女少妇全过程你懂的久久| 欧美天堂视频| 日韩大片在线| 天堂а√在线最新版中文在线| 久久av偷拍| 国产精品hd| 久久99视频| 久久精品日韩欧美| 麻豆国产精品| 精品国产精品久久一区免费式| 嫩草伊人久久精品少妇av杨幂| 欧美一级久久| 国产精品一二| 久久中文字幕一区二区| 久久精品国产亚洲一区二区三区| 国产一区一一区高清不卡| 电影91久久久| 91视频一区| 成人精品亚洲| 91精品1区| 视频精品一区二区| 日韩福利视频一区| 老司机免费视频一区二区| 国产精品国产一区| 日韩在线短视频| 亚洲午夜一级| 在线亚洲一区| 在线观看亚洲精品福利片| 日本亚洲视频| 国产欧美自拍| 久久久久伊人| 日韩国产在线| 在线 亚洲欧美在线综合一区| 老司机精品久久| 日韩精品亚洲专区| 欧美精品不卡| 夜鲁夜鲁夜鲁视频在线播放| 午夜精品网站| 日本成人在线不卡视频| 国产精品亚洲人成在99www| 久久伊人国产| 亚洲黄色免费av| 女主播福利一区| 日韩激情一区二区| 国内精品伊人| 亚洲成人精选| 日韩高清电影一区| 成人国产精品一区二区网站| 欧美 日韩 国产一区二区在线视频| 丝袜美腿亚洲色图| 国产欧美一区| 日韩精品首页| 亚洲精品三级| 国产一区二区色噜噜| 亚洲成人日韩| 国产日韩精品视频一区二区三区| 麻豆视频一区二区| 尤物tv在线精品| 婷婷精品久久久久久久久久不卡| 欧美国产免费| 午夜国产精品视频| 欧美亚洲tv| 久久国产免费| 青青伊人久久| 中文在线免费视频| 中文字幕av一区二区三区人| 久久精品国内一区二区三区| 好看的亚洲午夜视频在线| 国产精品15p| 老司机久久99久久精品播放免费| 国产极品嫩模在线观看91精品| 日本一区二区中文字幕| 国产成人久久精品一区二区三区| 伊人久久高清| 国产日韩在线观看视频| 亚洲午夜视频| 精品国内亚洲2022精品成人| 国产精品腿扒开做爽爽爽挤奶网站| 你懂的亚洲视频| 丝袜亚洲另类欧美| 日韩av福利| 欧美精品影院| 亚洲欧美高清| 国产精品久久观看| 日韩国产在线观看| 久久九九国产| 国产精品片aa在线观看| 亚洲专区欧美专区| 亚洲精品88| 国产精品色婷婷在线观看| 国产一区二区精品|