-
Notifications
You must be signed in to change notification settings - Fork 88
/
Copy pathJDKProxyHandler.java
63 lines (53 loc) · 1.9 KB
/
JDKProxyHandler.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package cn.codepub.patterns.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* <p>
* Created with IntelliJ IDEA. 2015/10/21 20:11
* </p>
* <p>
* ClassName:ProxyHanlder
* </p>
* <p>
* Description:使用JDK实现的动态代理
* 动态代理的主要作用有三
* ① Proxy类的代码量可以得到控制,由静态代理可以看出,随着业务变得庞大,代理类也会变得庞大,而动态代理不会出现这种情况
* ② 可以实现AOP编程,其实Spring中的AOP就是一个很好的应用实例
* ③ 可以解耦合,通过参数传递的形式就可以判断真实类,而不需要事先实例化,从而更加灵活多变
* </P>
*
* @author Wang Xu
* @version V1.0.0
* @since V1.0.0
*/
public class JDKProxyHandler implements InvocationHandler {
private Object tar;
public JDKProxyHandler() {
}
public JDKProxyHandler(Object tar) {
this.tar = tar;
}
public Object bind(Object tar) {
this.tar = tar;
return Proxy.newProxyInstance(tar.getClass().getClassLoader(), tar.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result;
System.out.println("before method invoke...");
System.out.println("Method: " + method);
result = method.invoke(tar, args);
System.out.println("after method invoke...");
return result;
}
public static void testDynamicProxy() {
System.out.println("-----------使用JDK动态代理-----------");
Count count = (Count) new JDKProxyHandler().bind(new CountImpl());
count.queryCount();
count.updateCount();
}
public static void main(String[] args) {
testDynamicProxy();
}
}