1.浠涔堟槸鍔ㄦ佷唬鐞?
絳旓細鍔ㄦ佷唬鐞嗗彲浠ユ彁渚涘鍙︿竴涓璞$殑璁塊棶錛屽悓鏃墮殣钘忓疄闄呭璞$殑鍏蜂綋浜嬪疄銆備唬鐞嗕竴鑸細瀹炵幇 瀹冩墍琛ㄧず鐨勫疄闄呭璞$殑鎺ュ彛銆備唬鐞嗗彲浠ヨ闂疄闄呭璞★紝浣嗘槸寤惰繜瀹炵幇瀹為檯瀵硅薄鐨勯儴鍒嗗姛鑳斤紝瀹為檯瀵硅薄瀹炵幇緋葷粺鐨勫疄闄呭姛鑳斤紝浠g悊瀵硅薄瀵瑰鎴烽殣钘忎簡瀹為檯瀵硅薄銆傚鎴蜂笉 鐭ラ亾瀹冩槸涓庝唬鐞嗘墦浜ら亾榪樻槸涓庡疄闄呭璞℃墦浜ら亾銆?br /> 2.涓轟粈涔堜嬌鐢ㄥ姩鎬佷唬鐞?
絳旓細鍥犱負鍔ㄦ佷唬鐞嗗彲浠ュ璇鋒眰榪涜浠諱綍澶勭悊
3.浣跨敤瀹冩湁鍝簺濂藉?
絳旓細鍥犱負鍔ㄦ佷唬鐞嗗彲浠ュ璇鋒眰榪涜浠諱綍澶勭悊
4.鍝簺鍦版柟闇瑕佸姩鎬佷唬鐞?
絳旓細涓嶅厑璁哥洿鎺ヨ闂煇浜涚被錛涘璁塊棶瑕佸仛鐗規畩澶勭悊絳?/span>
鐩墠Java寮鍙戝寘涓寘鍚簡瀵瑰姩鎬佷唬鐞嗙殑鏀寔錛屼絾鏄叾瀹炵幇鍙敮鎸佸鎺ュ彛鐨勭殑瀹炵幇銆?鍏跺疄鐜頒富瑕侀氳繃java.lang.reflect.Proxy綾誨拰java.lang.reflect.InvocationHandler鎺ュ彛銆?nbsp;
Proxy綾諱富瑕佺敤鏉ヨ幏鍙栧姩鎬佷唬鐞嗗璞★紝InvocationHandler鎺ュ彛鐢ㄦ潵綰︽潫璋冪敤鑰呭疄鐜?/p>
浠ヤ笅涓烘ā鎷熸渚嬶紝閫氳繃鍔ㄦ佷唬鐞嗗疄鐜板湪鏂規硶璋冪敤鍓嶅悗鍚戞帶鍒跺彴杈撳嚭涓ゅ彞瀛楃涓?/p>
鐩綍緇撴瀯
<br/>
瀹氫箟涓涓狧elloWorld鎺ュ彛
1 package com.ljq.test;
2
3 /**
4 * 瀹氫箟涓涓狧elloWorld鎺ュ彛
5 *
6 * @author jiqinlin
7 *
8 */
9 public interface HelloWorld {
10 public void sayHelloWorld();
11 }
<br/>
綾籋elloWorldImpl鏄疕elloWorld鎺ュ彛鐨勫疄鐜?/p>
1 package com.ljq.test;
2
3 /**
4 * 綾籋elloWorldImpl鏄疕elloWorld鎺ュ彛鐨勫疄鐜?br /> 5 *
6 * @author jiqinlin
7 *
8 */
9 public class HelloWorldImpl implements HelloWorld{
10
11 public void sayHelloWorld() {
12 System.out.println("HelloWorld!");
13 }
14
15 }
HelloWorldHandler鏄?InvocationHandler鎺ュ彛瀹炵幇
1 package com.ljq.test;
2
3 import java.lang.reflect.InvocationHandler;
4 import java.lang.reflect.Method;
5
6 /**
7 * 瀹炵幇鍦ㄦ柟娉曡皟鐢ㄥ墠鍚庡悜鎺у埗鍙拌緭鍑轟袱鍙ュ瓧絎︿覆
8 *
9 * @author jiqinlin
10 *
11 */
12 public class HelloWorldHandler implements InvocationHandler{
13 //瑕佷唬鐞嗙殑鍘熷瀵硅薄
14 private Object obj;
15
16 public HelloWorldHandler(Object obj) {
17 super();
18 this.obj = obj;
19 }
20
21 /**
22 * 鍦ㄤ唬鐞嗗疄渚嬩笂澶勭悊鏂規硶璋冪敤騫惰繑鍥炵粨鏋?br />
23 *
24 * @param proxy 浠g悊綾?br />
25 * @param method 琚唬鐞嗙殑鏂規硶
26 * @param args 璇ユ柟娉曠殑鍙傛暟鏁扮粍
27 */
28 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
29 Object result = null;
30 //璋冪敤涔嬪墠
31 doBefore();
32 //璋冪敤鍘熷瀵硅薄鐨勬柟娉?/span>
33 result=method.invoke(obj, args);
34 //璋冪敤涔嬪悗
35 doAfter();
36 return result;
37 }
38
39 private void doBefore(){
40 System.out.println("before method invoke");
41 }
42
43 private void doAfter(){
44 System.out.println("after method invoke");
45 }
46
47 }
嫻嬭瘯綾?/p>
package com.ljq.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class HelloWorldTest {
public static void main(String[] args) {
HelloWorld helloWorld=new HelloWorldImpl();
InvocationHandler handler=new HelloWorldHandler(helloWorld);
//鍒涘緩鍔ㄦ佷唬鐞嗗璞?/span>
HelloWorld proxy=(HelloWorld)Proxy.newProxyInstance(
helloWorld.getClass().getClassLoader(),
helloWorld.getClass().getInterfaces(),
handler);
proxy.sayHelloWorld();
}
}
榪愯緇撴灉涓猴細