Dynamic proxy(動(dòng)態(tài)代理模式)
Posted on 2005-07-29 11:10 魔之卡卡 閱讀(501) 評(píng)論(0) 編輯 收藏 所屬分類: 我的JAVAJava 1.3引入了名為“動(dòng)態(tài)代理類”(Dynamic Proxy Class)的新特性,利用它可為“已知接口的實(shí)現(xiàn)”動(dòng)態(tài)地創(chuàng)建包裝器(wrapper)類。
使用動(dòng)態(tài)代理,你創(chuàng)建的包裝器類不要求為所有方法都使用顯式的包裝器,創(chuàng)建的子類也不要求具有嚴(yán)格的出身,兩者方法可任選一種你認(rèn)為最好的。但是,動(dòng)態(tài)代理仍然有一個(gè)限制。當(dāng)你使用動(dòng)態(tài)代理時(shí),要包裝/擴(kuò)展的對(duì)象必須實(shí)現(xiàn)一個(gè)接口,該接口定義了準(zhǔn)備在包裝器中使用的所有方法。這一限制的宗旨是鼓勵(lì)良好的設(shè)計(jì),而不是為你帶來更多的麻煩。根據(jù)經(jīng)驗(yàn),每個(gè)類都至少應(yīng)該實(shí)現(xiàn)一個(gè)接口(nonconstant接口)。良好的接口用法不僅使動(dòng)態(tài)代理成為可能,還有利于程序的模塊化。
2種寫invoke()
注意:必須有return method.invoke(wrapped, args)
運(yùn)行效果如下:
before method bar
after method bar
dynamic proxy的實(shí)戰(zhàn)步驟
實(shí)際上dynamic proxy只有關(guān)鍵以下幾個(gè)東西
一、業(yè)務(wù)接口:一個(gè)Interface
二、實(shí)現(xiàn)業(yè)務(wù)接口的類:一個(gè)繼承Interface的Class
三、自己寫一個(gè)繼承了java.lang.reflect.InvocationHandler的Handler類
四、在這個(gè)Handler類中實(shí)現(xiàn)invoke()方法
五、在invoke()方法中一定要記得寫return method.invoke(wrapped, args)
六、要使Handler和自己的業(yè)務(wù)接口關(guān)聯(lián)還的寫下面的代碼(一般寫在Handler類中)
這樣返回的就是經(jīng)過代理的對(duì)象了(把原對(duì)象和Handler綁定到一起)
dynamic proxy的典型應(yīng)用《使用JAVA中的動(dòng)態(tài)代理實(shí)現(xiàn)數(shù)據(jù)庫連接池》
dynamic proxy在JDBC上的應(yīng)用
IBM文章:
《使用JAVA中的動(dòng)態(tài)代理實(shí)現(xiàn)數(shù)據(jù)庫連接池》
使用動(dòng)態(tài)代理,你創(chuàng)建的包裝器類不要求為所有方法都使用顯式的包裝器,創(chuàng)建的子類也不要求具有嚴(yán)格的出身,兩者方法可任選一種你認(rèn)為最好的。但是,動(dòng)態(tài)代理仍然有一個(gè)限制。當(dāng)你使用動(dòng)態(tài)代理時(shí),要包裝/擴(kuò)展的對(duì)象必須實(shí)現(xiàn)一個(gè)接口,該接口定義了準(zhǔn)備在包裝器中使用的所有方法。這一限制的宗旨是鼓勵(lì)良好的設(shè)計(jì),而不是為你帶來更多的麻煩。根據(jù)經(jīng)驗(yàn),每個(gè)類都至少應(yīng)該實(shí)現(xiàn)一個(gè)接口(nonconstant接口)。良好的接口用法不僅使動(dòng)態(tài)代理成為可能,還有利于程序的模塊化。
2種寫invoke()
注意:必須有return method.invoke(wrapped, args)
|
運(yùn)行效果如下:
before method bar
after method bar
dynamic proxy的實(shí)戰(zhàn)步驟
實(shí)際上dynamic proxy只有關(guān)鍵以下幾個(gè)東西
一、業(yè)務(wù)接口:一個(gè)Interface
二、實(shí)現(xiàn)業(yè)務(wù)接口的類:一個(gè)繼承Interface的Class
三、自己寫一個(gè)繼承了java.lang.reflect.InvocationHandler的Handler類
四、在這個(gè)Handler類中實(shí)現(xiàn)invoke()方法
五、在invoke()方法中一定要記得寫return method.invoke(wrapped, args)
六、要使Handler和自己的業(yè)務(wù)接口關(guān)聯(lián)還的寫下面的代碼(一般寫在Handler類中)
|
這樣返回的就是經(jīng)過代理的對(duì)象了(把原對(duì)象和Handler綁定到一起)
dynamic proxy的典型應(yīng)用《使用JAVA中的動(dòng)態(tài)代理實(shí)現(xiàn)數(shù)據(jù)庫連接池》
dynamic proxy在JDBC上的應(yīng)用
IBM文章:
《使用JAVA中的動(dòng)態(tài)代理實(shí)現(xiàn)數(shù)據(jù)庫連接池》