<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
    靜態(tài)代理
    靜態(tài)代理相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,無(wú)非就是聚合+多態(tài):
    參考:設(shè)計(jì)模式筆記 – Proxy 代理模式 (Design Pattern)
    動(dòng)態(tài)代理
    我們知道,通過(guò)使用代理,可以在被代理的類(lèi)的方法的前后添加一些處理方法,這樣就達(dá)到了類(lèi)似AOP的效果。而JDK中提供的動(dòng)態(tài)代理,就是實(shí)現(xiàn)AOP的絕好底層技術(shù)。
    JDK動(dòng)態(tài)代理
    JDK動(dòng)態(tài)代理主要涉及到j(luò)ava.lang.reflect包中的兩個(gè)類(lèi):Proxy和InvocationHandler。InvocationHandler是一個(gè)接口,通過(guò)實(shí)現(xiàn)該接口定義橫切邏輯,并通過(guò)反射機(jī)制調(diào)用目標(biāo)類(lèi)的代碼,動(dòng)態(tài)將橫切邏輯和業(yè)務(wù)邏輯編制在一起。
    Proxy利用InvocationHandler動(dòng)態(tài)創(chuàng)建一個(gè)符合某一接口的實(shí)例,生成目標(biāo)類(lèi)的代理對(duì)象。
    例子:Java筆記 – 反射 動(dòng)態(tài)代理
    CGLib動(dòng)態(tài)代理
    還有一個(gè)叫CGLib的動(dòng)態(tài)代理,CGLib全稱(chēng)為Code Generation Library,是一個(gè)強(qiáng)大的高性能,高質(zhì)量的代碼生成類(lèi)庫(kù),可以在運(yùn)行期擴(kuò)展Java類(lèi)與實(shí)現(xiàn)Java接口,CGLib封裝了asm,可以再運(yùn)行期動(dòng)態(tài)生成新的class。和JDK動(dòng)態(tài)代理相比較:JDK創(chuàng)建代理有一個(gè)限制,就是只能為接口創(chuàng)建代理實(shí)例,而對(duì)于沒(méi)有通過(guò)接口定義業(yè)務(wù)方法的類(lèi),則可以通過(guò)CGLib創(chuàng)建動(dòng)態(tài)代理。

    CGLib采用非常底層的字節(jié)碼技術(shù),可以為一個(gè)類(lèi)創(chuàng)建子類(lèi),并在子類(lèi)中采用方法攔截的技術(shù)攔截所有父類(lèi)方法的調(diào)用,并順勢(shì)織入橫切邏輯。

    JDK動(dòng)態(tài)代理和CGLib的比較

    CGLib所創(chuàng)建的動(dòng)態(tài)代理對(duì)象的性能比JDK所創(chuàng)建的代理對(duì)象性能高不少,大概10倍,但CGLib在創(chuàng)建代理對(duì)象時(shí)所花費(fèi)的時(shí)間卻比JDK動(dòng)態(tài)代理多大概8倍,所以對(duì)于singleton的代理對(duì)象或者具有實(shí)例池的代理,因?yàn)闊o(wú)需頻繁的創(chuàng)建新的實(shí)例,所以比較適合CGLib動(dòng)態(tài)代理技術(shù),反之則適用于JDK動(dòng)態(tài)代理技術(shù)。另外,由于CGLib采用動(dòng)態(tài)創(chuàng)建子類(lèi)的方式生成代理對(duì)象,所以不能對(duì)目標(biāo)類(lèi)中的final,private等方法進(jìn)行處理。所以,大家需要根據(jù)實(shí)際的情況選擇使用什么樣的代理了。

    同樣的,Spring的AOP編程中相關(guān)的ProxyFactory代理工廠內(nèi)部就是使用JDK動(dòng)態(tài)代理或CGLib動(dòng)態(tài)代理的,通過(guò)動(dòng)態(tài)代理,將增強(qiáng)(advice)應(yīng)用到目標(biāo)類(lèi)中。


    JDK動(dòng)態(tài)代理主要用到j(luò)ava.lang.reflect包中的兩個(gè)類(lèi):Proxy和InvocationHandler.
     
    InvocationHandler是一個(gè)接口,通過(guò)實(shí)現(xiàn)該接口定義橫切邏輯,并通過(guò)反射機(jī)制調(diào)用目標(biāo)類(lèi)的代碼,動(dòng)態(tài)的將橫切邏輯和業(yè)務(wù)邏輯編織在一起。
     
    Proxy利用InvocationHandler動(dòng)態(tài)創(chuàng)建一個(gè)符合某一接口的實(shí)例,生成目標(biāo)類(lèi)的代理對(duì)象。

    posted on 2015-04-22 00:22 abin 閱讀(630) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JavaBasic
    主站蜘蛛池模板: 亚洲国产一区在线| 日本最新免费网站| 永久免费A∨片在线观看| 午夜理伦剧场免费| 久久免费视频一区| 午夜视频在线免费观看| 在线看片韩国免费人成视频| 男女交性永久免费视频播放| 亚洲精品无码成人片在线观看| 日韩免费无码一区二区视频| 亚洲av手机在线观看| 日韩午夜免费视频| 色噜噜AV亚洲色一区二区| 亚洲精品成人区在线观看| 亚洲国产精品VA在线观看麻豆 | 国产大片线上免费看| 拨牐拨牐x8免费| 亚洲片一区二区三区| 91亚洲导航深夜福利| 精品久久久久久亚洲中文字幕| 伊人免费在线观看| 成全高清视频免费观看| 亚洲另类少妇17p| 久久久久亚洲AV无码专区首JN| 亚洲JLZZJLZZ少妇| 久久这里只精品99re免费| 女人与禽交视频免费看| 国产精品成人无码免费| 亚洲va中文字幕无码久久| 亚洲天天做日日做天天看 | 亚洲乱人伦中文字幕无码| 两性色午夜视频免费网| 一二三四免费观看在线电影| 国产精品xxxx国产喷水亚洲国产精品无码久久一区| 久久久无码精品亚洲日韩蜜桃| 亚洲AV成人影视在线观看| 中国黄色免费网站| 韩国日本好看电影免费看| 亚洲精品在线观看视频| 国产亚洲视频在线播放大全| 8x8x华人永久免费视频|