TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
Common.java:: P) ]% W! x# R+ Z8 o" J; n- S
- 7 l! Y& k9 I8 D! |
- public interface Common {
2 z! o& Y) `% U( E8 }
2 W# q9 k& G" V& ^/ Z! F3 [( n; t- public void action();; I) }- e+ g2 @7 N9 G" p2 @6 n5 B, s
- }
8 ~ |* S8 K* [& q0 w
复制代码 ; Z8 w, l1 s3 J1 [6 R
MyProxyed.java:
8 b; C9 F% \4 h$ A8 J; F- /**
4 m6 b1 `/ G. {1 W; @3 D o - * 被代理类
& ]" p" I, ?* \" A7 f - * @author Administrator
- i; Z0 ?, V+ A( \ - *
w6 k8 X; r1 M! c3 s$ s% }5 Z - */
! u1 b/ I% x4 x' R4 m$ L; S9 e - public class MyProxyed implements Common{! h6 f) d" I% w1 P. c8 I4 n8 C
- ( d9 z1 F" {9 y1 W
- public MyProxyed(){7 }6 R) D" ]4 q7 }- f" I% O
- # ]( Z3 r' e! i) h
- }
, Q. S' X# Y+ y( T, E0 L - @Override
( s$ O1 y( z( d/ Y9 x - public void action() {
/ w" X0 }- @; b0 Y" |8 s% i* o - // TODO Auto-generated method stub6 U0 z1 s1 c: v. f0 Z: L. R) u5 M
- System.out.println("我是被代理类,别忘了我。。。。");
+ y$ N: T' P( f1 i6 d( O - }
) m! ?8 X$ O4 l0 Q9 c5 r- V Z0 o
( C2 N3 d% v' {' \$ p& Y- }& U' H# X- G; d
复制代码 ProxyClass.java:
7 x% ]3 ~3 ~& R5 T& b- import java.lang.reflect.InvocationHandler;) Y" v/ Q) ]- m2 U0 F# b# t/ ~; `; O) H
- import java.lang.reflect.Method;
4 H |3 f Y! Z$ L0 h - import java.lang.reflect.Proxy;
8 ?5 R3 a0 a9 `" i$ V" r - . u7 a) j! A5 c* F5 N8 s3 ~$ @& s
4 h. \+ B; m9 i9 t- [9 O- public class ProxyClass implements InvocationHandler {$ o( F+ ~4 ?) {* Z: W
- Object obj;& k/ q7 G& A' F# n9 K2 a
- /**8 b0 M' p% j# U+ H/ T. k
- * 用于生成代理类
4 [! D+ R4 V6 ^+ _3 F9 X% t - * @param obj 被代理类对象3 [! g# F' X6 D7 |. J4 N( [+ J
- * @return 一个代理类
% f) K7 w" C z! q% _+ W6 x: m - */
r2 z( o. R, R8 l$ [" t. Z - public Object blind(Object obj){- W- W( J8 I9 o! [& e0 K
- this.obj=obj;; B- |0 s$ Q6 \ X0 [, Q
- return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
5 n( z2 i7 k& ~9 m, _, G' R - }
3 x a3 {& |* L( o' O0 L9 j8 l - /**0 ~: {& M3 r: H: p
- * 代理类对象调用接口方法时,实质上是返回来调用了该方法; d5 S! X6 n, F; H7 E
- */0 r; r3 }. m1 u: k/ f
- @Override
& I- k6 R2 e, R+ { - public Object invoke(Object arg0, Method arg1, Object[] arg2)7 l$ v- O. }- h, Z6 b0 [
- throws Throwable {
. W7 T$ Y6 Y+ M* i, t% x - // TODO Auto-generated method stub6 ^: T: V+ L0 ?2 I+ O- d
- Object returnVal=arg1.invoke(obj, arg2);4 k/ w$ W2 N& N" N5 ]# V ~9 `( `
- System.out.println("我是代理类");2 d$ S! a0 f! o- z9 B' Z
- return returnVal;
5 W! l/ _5 }% Q - }3 a) Q+ I( C6 u/ e7 v
0 V# ]7 j3 ^4 ~- K" m- G- }
$ C0 q! C# k! w- a1 v
复制代码 Test.java:9 j, N% \" c$ l, W9 q% }
- /**
0 o q; p0 q0 l! H7 _ - * 一个动态代理的例子0 ^" U; V; V/ C0 z* M# l
- * @author Administrator) n( b( U& j+ J
- *被代理类和代理类有共同的方法,代理类调用方法时,其是实质是调用了InvocationHandler中的invoke方法
- | l& B' t" G) w z - */
8 _/ [5 R, ?) |2 j W- Z - public class Test {
* a5 o3 X! c" w" P
6 a0 |8 e; A# n2 E0 I- public static void main(String[] args) {
( \. _, N5 N( A$ L5 q - // TODO Auto-generated method stub( N3 Q* q3 F' M* t* Y) o
- MyProxyed proxyed=new MyProxyed();
: Y/ a2 Q6 p6 ~/ Y - ProxyClass proxy=new ProxyClass();
: h, T, u% b% x. z3 l - //这个是真正的代理类
+ @% Z# u. b8 }: O: R T - Object obj=proxy.blind(proxyed);
8 C# F3 s% B; t2 A8 H, @6 f! ` - Common common=(Common)obj;
- |) h ]3 B5 B8 f2 r: M: ]1 n - common.action();
* d( s( {2 I& _% X0 Q+ B. F - }1 f) w$ }; C* ~/ q7 k+ B$ ^4 y8 I
- 0 O- x. ~2 b, R0 T$ ^+ U& @
- }8 M ]* q0 m2 A% H6 y5 A g: c8 h
复制代码 - g, C p# i6 V$ |
ProxyTest.zip
(5.52 KB, 下载次数: 5)
) a% n* y+ J! q0 e
' ^4 H' Y2 ]8 M1 F. j0 o5 H |
|