锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av永久无码精品古装片,亚洲国产成人精品无码区花野真一 ,亚洲成a人片在线看http://www.tkk7.com/seaairland/category/8862.html<script type="text/javascript"> <!-- google_ad_client = "pub-6825418521341757"; google_ad_width = 120; google_ad_height = 240; google_ad_format = "120x240_as"; google_ad_type = "text_image"; google_ad_channel ="6369214374"; google_color_border = "336699"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_url = "008000"; google_color_text = "000000"; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> zh-cnFri, 02 Mar 2007 07:20:31 GMTFri, 02 Mar 2007 07:20:31 GMT60Dynamic Proxy浠嬬粛http://www.tkk7.com/seaairland/archive/2006/03/24/37198.htmlchenhuichenhuiFri, 24 Mar 2006 05:34:00 GMThttp://www.tkk7.com/seaairland/archive/2006/03/24/37198.htmlhttp://www.tkk7.com/seaairland/comments/37198.htmlhttp://www.tkk7.com/seaairland/archive/2006/03/24/37198.html#Feedback0http://www.tkk7.com/seaairland/comments/commentRss/37198.htmlhttp://www.tkk7.com/seaairland/services/trackbacks/37198.html 涓銆?/span> proxy妯″紡綆浠?/span>
GoF浠嬬粛浜唒roxy妯″紡銆備唬鐞嗗璞′負(fù)鍏朵粬瀵硅薄鎻愪緵涓縐嶄唬鐞嗕互鎺у埗瀵硅繖涓璞$殑璁塊棶銆傚畠闈欐佺粨鏋勫涓嬶細(xì)
Client 闇瑕佽闂?/span> RealSubject 鏃訛紝瀹冨疄闄呰闂殑鏄?/span> Proxy 瀵硅薄錛岃屽悗 Proxy 瀵硅薄灝嗚姹傚鎵樼粰 RealSubject 銆?/span> RealSubject 瀹炵幇浜嗕富瑕佺殑閫昏緫錛?/span> Proxy 瀵硅薄鍙互鍦ㄥ鐞嗚姹備箣鍓嶃佷箣鍚庝綔棰濆鐨勫鐞嗐傚彲浠ョ湅鍑猴紝 Proxy 鍜?/span> RealSubject 瀹炵幇浜嗗悓鏍風(fēng)殑鎺ュ彛錛岃繖鏍?/span> Client 鎵嶅彲浠ヨ皟鐢?/span> RealSubject 瀹炵幇鐨勬墍鏈?/span> Subject 鐨勬柟娉曘?/span>
鎴戜滑鍦ㄥ疄鐜?/span> Proxy 鏃訛紝濡傛灉浣跨敤鐨勬槸 C++ 璇█錛屾垜浠彲浠ラ噸杞芥搷浣滅 -> 鏉ュ疄鐜頒唬鐞嗐備紭鐐規(guī)槸瀹炵幇綆鍗曪紝緙虹偣鏄畠涓嶈兘鍖哄埆瀵瑰緟涓嶅悓鐨勮姹傘傚綋鐒朵篃鍙互鏄敤鏅氱殑褰㈠紡錛屽垱寤轟竴涓唬鐞嗙被錛屽疄鐜版帴鍙o紝騫跺皢璋冪敤濮旀墭緇欒浠g悊鐨勫璞°?/span>
濡傛灉浣跨敤鐨勬槸 Java 璇█錛屾垜浠綋鐒跺彲浠ヤ嬌鐢ㄦ櫘閫氱殑褰㈠紡鏉ュ疄鐜?/span> Proxy 妯″紡銆備絾鏄?/span> JDK1.3 寮曞叆浜?/span> dynamic proxy 錛屽畠鍏佽鎴戜滑鏇村鏄撶殑瀹炵幇浠g悊銆?/span>
浜屻?/span> JDK涓殑Dynamic Proxy浠嬬粛
瀹冪敱 java.lang.reflect.Proxy 銆?/span> java.lang.reflect.InvocationHandler 絳夌粍鎴愩?/span> Proxy 綾繪嫢鏈変竴涓?/span> protected 鐨?/span> InvocationHandler 綾誨瀷鐨勬垚鍛樺彉閲忋?/span> 瀹冨彧鑳戒唬鐞?/span> Interface銆?/span>
瀹冪殑鍩烘湰鎬濇兂濡備笅錛?/span>
1.聽聽聽聽 浠g悊綾葷敱 Proxy 鐨勯潤鎬佹柟娉?/span> getProxyClass 鏉ュ姩鎬佺殑鍒涘緩鍑烘潵銆傝鏂規(guī)硶鎵闇瑕佺殑涓涓弬鏁頒負(fù)瀹冩墍浠g悊鐨勬帴鍙f暟緇勩傚垱寤哄嚭鏉ョ殑浠g悊綾誨疄鐜頒簡鎵鏈夌殑鎺ュ彛錛屽茍涓旂戶鎵夸簡 Proxy 銆?/span>
2.聽聽聽聽 浠g悊綾誨疄鐜扮殑鎺ュ彛鏂規(guī)硶鐨勫鐞嗛昏緫涓猴紝璋冪敤鐖剁被鐨?/span> InvocationHandler 綾誨瀷鐨勬垚鍛樺彉閲忕殑 invoke 鏂規(guī)硶銆?/span>
鐢辨鍙互鐪嬪嚭錛屽繀欏昏 Proxy 瀵硅薄鎷ユ湁涓涓紜殑 InvocationHandler 鐨勫疄鐜般?/span> Proxy 瀵硅薄鐢?/span> Proxy 鐨勯潤鎬佹垚鍛樺嚱鏁?/span> newProxyInstance 鏉ュ垱寤猴紝璇ュ嚱鏁扮殑鏈鍚庝竴涓弬鏁頒負(fù) InvocationHandler 綾誨瀷銆傚姩鎬佺敓鎴愮殑浠g悊綾誨疄鐜扮殑鎵鏈夋帴鍙f柟娉曢兘琚鎵樼粰 InvocationHandler 鎺ュ彛鐨?/span> invoke 鏂規(guī)硶銆?/span>
涓夈?/span> 渚嬪瓙浠g爜
鍋囧鏈夊涓嬫帴鍙o細(xì)
interface Foo {
聽void f(String s);
聽void g(int i);
聽String h(int i, String s);
}
騫朵笖鏈変竴涓疄鐜?/span>
class Implement implements Foo {
聽聽 鈥?/span>
}
鐜板湪鎴戜滑鎯沖湪 Foo 鎺ュ彛鐨勬瘡涓柟娉曡皟鐢ㄦ椂錛屽姞鍏ユ棩鑷熾備竴涓緢綆鍗曞緢鐩磋鐨勬柟娉曞涓嬶細(xì)
class LogProxy implements Foo {
private Foo delegate ;
聽聽 public LogProxy( Foo foo ) {
聽聽聽聽聽聽聽聽聽 delegate = foo ;
}
public String h(int i, String s) {
聽聽聽聽聽 System.out.println(鈥渃all h begin 鈥? ;
聽聽聽聽聽 String result = delegate.h( i , s ) ;
聽聽聽聽聽 System.out.println(鈥渃all h end 鈥? ;
聽聽聽聽聽 Return result ;
}
鈥?/span>
}
new LogProxy( new Implement() ).h( 10 , 鈥渟tr鈥?;
鍙互鐪嬪嚭榪欐牱鐨勫疄鐜頒唬鐮佸緢澶氾紝鑰屼笖鍑犱箮閮芥槸鐩稿悓鐨勩傚綋鐒跺彲浠ョ紪鍐欑▼搴忔潵鍐欏嚭榪欐牱鐨勪唬鐮侊紝浣嗘槸鎴戜滑濡傛灉浣跨敤 JDK1.3 寮曞叆鐨?/span> dynamic proxy 錛岄偅涔堟儏鍐靛氨瀹屽叏涓嶅悓浜嗐?/span>
鍥涖?/span> dynamic proxy瀹炵幇Log鐨勪唬鐮?/span>
1.聽聽聽聽聽聽 緙栧啓 InvocationHandler 鐨勫瓙綾伙紝鏉ユ嫤鎴墍鏈夌殑鏂規(guī)硶璋冪敤銆?/span>
class LogProxy implements InvocationHandler {
聽聽聽聽聽 public LogProxy( Object object ) { obj = object ; }
聽聽聽聽聽 public Object invoke(Object proxy, Method method, Object[] args)
聽聽聽聽聽 throws Throwable {聽聽
String methodName = method.getName() ;
System.out.println("call " + methodName聽+ 鈥?begin 鈥?) ;聽聽聽聽聽聽聽
聽聽聽聽聽聽 聽聽聽 Object result = method.invoke( obj , args )聽;
System.out.println("call " + methodName + 鈥?end鈥?) ;聽聽聽聽聽聽聽
聽聽聽 聽聽聽聽聽聽 Return result ;
聽聽聽聽聽 }
聽聽聽聽聽 public Object obj = null ;
}
2.聽聽聽聽聽聽 浣跨敤 Proxy鐨勯潤鎬佹柟娉曟潵鍒涘緩浠g悊綾匯偮?/span>
LogProxy dp = new LogProxy( new Implment() ) ;
Foo proxy = (Foo) Proxy.newProxyInstance(
聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽// [1] class loader
聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽 Foo.class.getClassLoader(),
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // [2] interface's Class array
聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new Class[]{ Foo.class },
聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // [3] InvocationHandler
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 dp ) ;
3.聽聽聽聽聽聽 瀹㈡埛鍦ㄤ唬鐞嗙被涓婅皟鐢ㄦ柟娉?/span>
proxy. h( 10 , 鈥渟tr鈥?;
鍙互鐪嬪嚭錛屽鏋滄帴鍙d腑鏈夊緢澶氭柟娉曪紝閭d箞浣跨敤 dynamic proxy 鏄緢鍚堥傜殑錛屼絾鏄鏋滄帴鍙e彧鏈夊緢灝戠殑鏂規(guī)硶錛屽彲鑳戒嬌鐢ㄦ櫘閫氱殑鏂規(guī)硶鏇寸洿瑙傦紝涔熸洿綆鍗曘?/span>
浜斻?/span> 搴旂敤渚嬪瓙
濡傛灉鎴戜滑璁捐涓涓暟鎹簱榪炴帴姹狅紝鎺ュ彛濡備笅錛?/span>
interface DBConnectionPool {
聽聽聽聽聽聽聽聽聽聽聽 public java.sql.Connection getConnection() ;
聽聽聽聽聽聽聽聽聽聽聽 public void releaseConnection( java.sql.Connection conn ) ;
}
class DBConnectionPoolImpl implements DBConnectionPool {
聽聽聽聽聽聽聽聽聽聽聽 鈥?/span>
}
閭d箞涓涓彲鑳界殑鐢ㄦ埛璋冪敤搴忓垪濡備笅錛?/span>
void getData() {
聽聽聽聽聽聽聽聽聽聽聽 DBConnectionPoolImpl聽cpi = new DBConnectionPoolImpl() ;
聽聽聽聽聽聽聽聽聽聽聽 Connection conn = cpi.getConnection() ;
聽聽聽聽聽聽聽聽聽聽聽 // use conn to retrieve data from db
聽聽聽聽聽聽聽聽聽聽聽 鈥?/span>
聽聽聽聽聽聽聽聽聽聽聽 cpi. releaseConnection( conn ) ;
聽聽聽聽聽聽聽聽聽聽聽
}
钃濊壊鐨勪唬鐮佽〃紺轟簡灝嗚繛鎺ヨ繕緇欒繛鎺ユ睜錛屽洜涓烘墍鏈夌殑榪炴帴閮芥槸鐢辮繛鎺ユ睜鏉ョ鐞嗙殑銆備絾鏄繖鏍風(fēng)殑浠g爜瀵圭敤鎴鋒潵璁插彲鑳戒笉澶範(fàn)鎯紝鑰屼笖榪嬌鐢ㄦ埛榪欐牱緙栧啓浠g爜錛岀敤鎴蜂細(xì)鎰忚瘑鍒?/span> cpi 瀵硅繛鎺ヤ綔浜嗙壒孌婄殑澶勭悊銆?/span>
聽聽聽聽聽聽聽聽聽聽聽 涓涓洿濂界殑鏂規(guī)硶鏄皟鐢?/span> Connection 鎺ュ彛鐨?/span> close 鏂規(guī)硶銆傝繖鏍風(fēng)殑浠g爜濡備笅錛?/span>
void getData() {
聽聽聽聽聽聽聽聽聽聽聽 DBConnectionPoolImpl聽cpi = new DBConnectionPoolImpl() ;
聽聽聽聽聽聽聽聽聽聽聽 Connection conn = cpi.getConnection() ;
聽聽聽聽聽聽聽聽聽聽聽 // use conn to retrieve data from db
聽聽聽聽聽聽聽聽聽聽聽 鈥?/span>
聽聽聽聽聽聽聽聽聽聽聽 conn.close() ;
}
榪欐牱鏇寸鍚堟櫘閫氱敤鎴風(fēng)殑緙栫爜涔?fàn)鎯備絾鏄彲浠ヨ繖涔堢紪鐮佺殑鍓嶆彁鏄細(xì)
1銆?/font> close 鍑芥暟瑕佸皢榪炴帴瀵硅薄榪樼粰榪炴帴姹狅紝鑰屼笉鏄叧闂墿鐞嗙殑鏁版嵁搴撹繛鎺ャ?/span>
2銆?/font> 鎵鏈?/span> Connection 鐨勫叾浠栧嚱鏁板繀欏昏兘澶熸甯稿伐浣溿?/span>
涔熷氨鏄闇瑕佺壒孌婂鐞?/span> close 鍑芥暟錛岃屽鍏朵粬鍑芥暟鐩存帴榪涜杞彂灝卞彲浠ヤ簡銆?/span>
鐢ㄦ渶鐩存帴鐨勬柟娉曞疄鐜板涓嬶細(xì)
class ConnectionProxy implements Connection {
聽聽聽聽聽聽聽聽聽聽聽 private Connection realConn ;
聽聽聽聽聽聽聽聽聽聽聽 private DBConnectionPool dbcp ;
聽聽聽聽聽聽聽聽聽聽聽 public ConnectionProxy( Connection conn聽,聽DBConnectionPool pool ) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 realConn = conn ;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 dbcp = pool ;
}
public void close() throws SQLException {
聽聽聽聽聽聽聽聽聽 dbcp. releaseConnection( realConn ) ;
}
public PreparedStatement prepareStatement(String sql, String columnNames[]) throws SQLException {
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽 return realConn.prepareStatement( sql , columnNames ) ;
}
//聽聽聽聽聽聽聽 鎵鏈夌殑鍏朵粬Connection鎺ュ彛涓殑鏂規(guī)硶杞彂
鈥?/font>
}
鍙互鐪嬪嚭榪欐牱鐨勫疄鐜頒唬鐮佸緢澶氾紝鑰屼笖鍑犱箮閮芥槸鐩稿悓鐨勩傚綋鐒跺彲浠ョ紪鍐欑▼搴忔潵鍐欏嚭榪欐牱鐨勪唬鐮侊紝濡傛灉浣跨敤 DynamicProxy 錛岄偅涔堟暣涓疄鐜板氨姣旇緝浼橀泤浜嗐?/span>
Classs ConnectionProxy InvocationHandler {
聽聽 Connection conn ;
聽聽 DBConnectionPool cp ;
Public ConnectionProxy( Connection conn , DBConnectionPool cp ) {
This.conn = conn ;
This.cp = cp ;
}
public Object invoke(Object proxy, Method method, Object[] args)
聽聽聽聽聽 throws Throwable {
聽聽聽聽聽聽聽聽聽聽聽聽 Object result = null ;
聽聽聽聽聽聽聽聽聽聽聽聽 if ( 鈥渃lose鈥?equals( method.getName()聽) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 cp. releaseConnection( conn ) ;
} else {
聽聽聽聽聽聽 聽聽聽 聽result = method.invoke( obj , args )聽;
}
聽聽聽聽聽聽聽聽聽聽 Return result ;
聽聽聽聽聽 }
}
鏈変釜綾?/span> ConnectionProxy鍚庯紝鎴戜滑鍙渶瑕佽 DBConnectionPool 鐨勬柟娉?/span> getConnection 榪斿洖鍔ㄦ佷唬鐞嗗嵆鍙傚疄鐜板涓嬶細(xì)
class DBConnectionPoolImpl implements DBConnectionPool {
聽聽聽聽聽聽聽聽聽聽聽 public Connection getConnection() {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Connection conn聽;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 浠庢睜涓彇寰楄繛鎺ユ垨寤虹珛榪炴帴
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return (Connection)Proxy.newInstance(
聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽 Connection.class.getClassLoader(),
聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new Class[]{ Connection.class },
聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 new ConnectionProxy( conn ) 聽) ;
}
}
榪欐牱灝卞疄鐜頒簡榪炴帴姹犮?/span>
jdk1.5 鎻愪緵鐨勭敤浜?/span> rmi 鐨?/span> dynamic stub 涔熶嬌鐢?/span> dynamic proxy 鎶鏈傚彧瑕佷綘璁ょ湡鐮旂┒錛屽叾瀹炲緢澶氶棶棰橀兘鍙互浣跨敤 dynamic proxy 鏉ヨВ鍐熾?/span>


chenhui 2006-03-24 13:34 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 国产成人精品久久亚洲高清不卡| 久久亚洲AV成人无码电影| 亚洲日韩一区二区一无码| 99热在线精品免费全部my| 亚洲成A∨人片在线观看无码| 久久香蕉国产线看免费| 亚洲日本一区二区三区| 两个人看的www免费高清| 国产成A人亚洲精V品无码性色| 色www永久免费| 久久久久亚洲精品日久生情| 91精品手机国产免费| 亚洲免费网站在线观看| 亚洲人成电影网站免费| 亚洲爆乳AAA无码专区| 亚洲成?v人片天堂网无码| 亚洲阿v天堂在线2017免费| 亚洲熟妇av一区二区三区漫画| 波多野结衣免费一区视频 | 亚洲国产精品久久66| 久久国产免费观看精品3| 亚洲女人初试黑人巨高清| 成年在线网站免费观看无广告| 蜜桃传媒一区二区亚洲AV| 国产成人精品亚洲精品| 国产成人精品一区二区三区免费| 亚洲午夜国产精品| 日本人的色道www免费一区| 深夜福利在线免费观看| 亚洲成A人片在线观看WWW| AV大片在线无码永久免费| 久久久久久亚洲精品无码| 国产AV无码专区亚洲AWWW | 日本免费中文字幕在线看| 一级做α爱过程免费视频| 亚洲美女视频一区二区三区| 国产网站免费观看| 久久aⅴ免费观看| 亚洲av成人中文无码专区| 国产成人亚洲综合色影视 | 亚洲人成国产精品无码|