1,基于接口的动态代理必须首先要定义接口:
代码如下:
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
|
package
com.tong.qiu.proxy;
import
java.lang.reflect.InvocationHandler;
import
java.lang.reflect.Method;
import
java.lang.reflect.Proxy;
/**
* Created by ywb
*/
public
interface
Subject {
void
doSomething();
void
somethingElse(String arg);
}
class
DynamicProxyHandler
implements
InvocationHandler {
private
Object proxied;
public
DynamicProxyHandler(Object proxied) {
this
.proxied = proxied;
}
public
Object
invoke(Object proxy, Method method, Object[] args)
throws
Throwable {
System.out.println(
"**** proxy: "
+ proxy.getClass() +
", method: "
+ method +
", args: "
+ args);
if
(args !=
null
)
for
(Object arg : args)
System.out.println(
" "
+ arg);
return
method.invoke(proxied, args);
}
}
class
RealObject
implements
Subject {
public
void
doSomething() {
System.out.println(
"doSomething"
);
}
public
void
somethingElse(String arg) {
System.out.println(
"somethingElse "
+ arg);
}
}
class
SimpleDynamicProxy {
public
static
void
consumer(Subject iface) {
iface.doSomething();
iface.somethingElse(
"bonobo"
);
}
public
static
void
main(String[] args) {
RealObject real =
new
RealObject();
consumer(real);
Subject proxy = (Subject) Proxy.newProxyInstance(
//此处生成代理对象
Subject.
class
.getClassLoader(),
new
Class[]{ Subject.
class
},
new
DynamicProxyHandler(real));
consumer(proxy);
}
}
|
1,基于接口的动态代理必须首先要定义接口:
代码如下:
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
|
package
com.tong.qiu.proxy;
import
java.lang.reflect.InvocationHandler;
import
java.lang.reflect.Method;
import
java.lang.reflect.Proxy;
/**
* Created by ywb
*/
public
interface
Subject {
void
doSomething();
void
somethingElse(String arg);
}
class
DynamicProxyHandler
implements
InvocationHandler {
private
Object proxied;
public
DynamicProxyHandler(Object proxied) {
this
.proxied = proxied;
}
public
Object
invoke(Object proxy, Method method, Object[] args)
throws
Throwable {
System.out.println(
"**** proxy: "
+ proxy.getClass() +
", method: "
+ method +
", args: "
+ args);
if
(args !=
null
)
for
(Object arg : args)
System.out.println(
" "
+ arg);
return
method.invoke(proxied, args);
}
}
class
RealObject
implements
Subject {
public
void
doSomething() {
System.out.println(
"doSomething"
);
}
public
void
somethingElse(String arg) {
System.out.println(
"somethingElse "
+ arg);
}
}
class
SimpleDynamicProxy {
public
static
void
consumer(Subject iface) {
iface.doSomething();
iface.somethingElse(
"bonobo"
);
}
public
static
void
main(String[] args) {
RealObject real =
new
RealObject();
consumer(real);
Subject proxy = (Subject) Proxy.newProxyInstance(
//此处生成代理对象
Subject.
class
.getClassLoader(),
new
Class[]{ Subject.
class
},
new
DynamicProxyHandler(real));
consumer(proxy);
}
}
|