TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
Common.java: I/ y5 u9 {: B* Y. o6 @: m
- - Z& u' D" x9 U4 s, Z
- public interface Common {
# V& s% N; a+ J
8 \# a9 l% L$ y1 Q2 h- public void action();" O. B1 d, _( x- R/ H. D, G
- }
5 `' x7 d. A$ I- P9 J
复制代码
6 r8 Y A: b, \MyProxyed.java:# O% n' F A" |- W
- /**
3 ~: e3 ^+ j. b: a( q8 ? - * 被代理类
/ x, Y+ Q. P q6 W o* I - * @author Administrator
N$ m h/ J2 F# e5 X - *
/ M2 k4 `1 V4 ^7 R; |9 Q - */
" ]8 Z1 |( }' M - public class MyProxyed implements Common{' V9 w, W ~ I: @8 G2 v4 y: ]
. a r, G+ v* ^: `5 i7 s- public MyProxyed(){" I6 |. ]0 x5 \. N8 q; i; j4 d$ u' k
- ( O7 X& w r, Z' c- w
- }3 n/ |7 n. H9 O& D
- @Override" ~# J- u5 q- t v
- public void action() {
! i0 U" Z6 G# O - // TODO Auto-generated method stub+ _5 Q2 X; L- E; B
- System.out.println("我是被代理类,别忘了我。。。。");
1 c9 \' x2 Z8 y1 d7 f( O, o* J. s7 I" } - }
v/ M6 J: g _4 ^& p - & w$ N( i# q! Y7 ^9 W3 S
- }- C* k/ C3 k4 H/ S3 l
复制代码 ProxyClass.java:; }& ]: L m' C1 z& L' t2 S! a: e4 n
- import java.lang.reflect.InvocationHandler;" r' w4 A S9 ^7 s& S* Z6 `1 k$ F& j
- import java.lang.reflect.Method;
( ], G" \; d# r6 e0 Z - import java.lang.reflect.Proxy;
5 }# V& w, E" a - # V6 Z: ^2 @8 }
- 2 L) l- ^; M' {0 j& d% J3 _
- public class ProxyClass implements InvocationHandler {2 T, ?3 o/ P; v. Z* z: k- k, @
- Object obj;
: t$ g, ^6 [/ } - /**
6 ^( w3 D, |% W' l* B9 W- P* ] - * 用于生成代理类
0 t& A" g* @0 Q% f3 ] - * @param obj 被代理类对象0 t; n8 R: H, X% s' d) o
- * @return 一个代理类
; c. ^+ D( T. \# C3 {- | - */' r* `% ]8 d# Z9 ^1 ]: J
- public Object blind(Object obj){
+ Q A! Q: U5 F. P( a* q8 `; @ - this.obj=obj;1 `9 y7 D: r. j1 Q9 U4 r
- return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);% T- r9 d* ^' Z% H, Q
- }
9 D7 I% S1 x- l - /**
; r' V" I$ S( h4 J0 K - * 代理类对象调用接口方法时,实质上是返回来调用了该方法
2 ~7 U7 q; C6 }. y7 r% ` - */
% O2 h) K1 D+ Y* n% S - @Override' F X; f j+ g W4 n
- public Object invoke(Object arg0, Method arg1, Object[] arg2)2 j( L( Q$ L& Q2 m7 J7 N3 z/ b
- throws Throwable {
( z, h8 x6 m) Z; I! H/ h. z$ M - // TODO Auto-generated method stub
1 W C5 I5 R( `& }' g9 a - Object returnVal=arg1.invoke(obj, arg2);
$ L/ S1 r# O: ^ - System.out.println("我是代理类");0 n; L6 j. B5 ~- x
- return returnVal;
0 P' a2 @% {9 D! J! D - }; }: m6 h4 \" e# Q" ~
: {6 `& `& f0 h! d" l; M- }
6 i# A- y9 o4 i) d: Y7 U
复制代码 Test.java:
2 G& ]! p4 K% z1 r- /**) |$ u% W& F" [) h# }5 W
- * 一个动态代理的例子/ s/ @1 f7 b+ ]; F/ `% p# b6 g. J
- * @author Administrator
0 n! s( z: w D7 d* N - *被代理类和代理类有共同的方法,代理类调用方法时,其是实质是调用了InvocationHandler中的invoke方法
; K0 i! [5 l. a. y, o0 | - */
% V6 A' R/ q- O: d/ F+ V( O2 j - public class Test {
y1 a7 D0 G4 n6 l" k3 i - , H0 B; q$ s- j) Q+ v" f/ e
- public static void main(String[] args) {
6 K' s; M/ g9 k& _ - // TODO Auto-generated method stub
7 `! k N/ \+ K9 [4 k# j/ P7 O - MyProxyed proxyed=new MyProxyed();" f. P! H- b1 |/ m8 x* I- c5 R3 V
- ProxyClass proxy=new ProxyClass();2 r/ y3 t* C+ [* d2 F! U+ n" e' a
- //这个是真正的代理类
9 A+ b. t) |* C% K0 g - Object obj=proxy.blind(proxyed);7 \) K' E1 Z- `$ }0 K
- Common common=(Common)obj;
0 q" Y! f% m U - common.action();
3 d }0 n0 b' V( f - }
7 K- `- H+ o3 z% Q" x( R
, O3 N5 Q7 ~! l R7 }: t- }8 ]1 n" P) L) o( |
复制代码
8 B; D. c) _5 l# j6 O4 A" Y
ProxyTest.zip
(5.52 KB, 下载次数: 5)
5 C/ H1 @& Z0 w" x* }9 B" I9 {
5 m4 a9 E" w- i: |: l( V |
|