TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
Common.java:: t1 y# `9 x% T
- ; z1 n: a) `1 a) m! y2 X$ g
- public interface Common {) H- o5 I! z' _& h' {
+ u; k! B" m# ~- u+ }& ]( w# \- public void action();& g0 d; \) G3 `4 H4 s5 g6 L+ U0 a
- }! q% o) f! @9 G* u3 h* ~; g
复制代码 ) I; s: s8 E" r; A0 d
MyProxyed.java:
# I) Y! U* B0 Z( {8 k6 d( `' x- /**
8 r1 y; Q/ o d7 M0 z- H - * 被代理类" \& a. K) o8 {# b
- * @author Administrator
1 ?1 F+ H/ Z B# Q; R7 b: s - *
t" \0 f5 | z - */& N8 J4 Y+ r4 M
- public class MyProxyed implements Common{
_ q D* } [; ?1 O ~0 X2 K - 3 V! r* t0 k9 \* q6 i9 g$ M
- public MyProxyed(){+ Y4 B0 K$ d8 d6 W; C( f# u' y
-
+ `* `* y8 R9 ]' f: F - } R2 g% `( |' g% H% d5 t; H* \
- @Override
1 B. A+ M l: D Z( S - public void action() {9 p% E- E$ p! H
- // TODO Auto-generated method stub6 F/ _& g# w( W' R) o5 e$ U& _
- System.out.println("我是被代理类,别忘了我。。。。");
- b4 ^% Z, P, B% M- y( V - } u1 V7 e$ M3 p2 s2 ^
7 F8 s8 p W& I ]% m2 E- }
+ A4 q& P6 ]1 } V$ z
复制代码 ProxyClass.java:, r/ B7 ~9 r# t; O/ F) u
- import java.lang.reflect.InvocationHandler;
; {, G! e& N+ b2 O" j( z0 j - import java.lang.reflect.Method;
1 n3 N5 e, V. T! a - import java.lang.reflect.Proxy;
9 o/ }" Q# i. l; y( p: J
) a7 k$ k- C: l. ?, C/ D- 6 P# ^7 \! f1 e! G
- public class ProxyClass implements InvocationHandler {
8 j2 s/ \4 d8 P - Object obj;
4 A. Z; C" p- u$ ~8 i; j - /**
, H6 ^/ L, V. L0 {6 G& E/ l - * 用于生成代理类; ?# T5 t5 }* i G8 l% I4 [
- * @param obj 被代理类对象$ W0 R s$ y2 i) \
- * @return 一个代理类
0 R: \& F; f1 r; h6 Z7 Y1 I - */
! t. }6 _0 e' s! U0 Q0 r - public Object blind(Object obj){7 [3 P) |" J! J; F5 a* F+ c/ P
- this.obj=obj;
9 X' m. v) S5 P3 R5 P5 D v - return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); L" W' h P, t. w9 i5 ]
- }! ?+ P" e$ q- t8 J( {4 ~2 u
- /**4 l/ N. R( P. W8 d+ T, ^
- * 代理类对象调用接口方法时,实质上是返回来调用了该方法" E5 K) O3 d+ ~: n
- */# [( n1 C$ p3 f: D3 p9 D( K1 ?
- @Override" e8 @( j2 s# X6 G& ?/ s* U
- public Object invoke(Object arg0, Method arg1, Object[] arg2)
7 r- _/ f0 X' J- U$ W - throws Throwable { w) n9 v( z' S
- // TODO Auto-generated method stub. h: m0 P# |; W+ d
- Object returnVal=arg1.invoke(obj, arg2);
1 G# y, L X7 G% `$ k, u/ M - System.out.println("我是代理类");1 b9 W* J q0 T) `2 X& G J* `
- return returnVal;
$ V }3 ^# Z% P& u' T& a j2 q - }
G7 ?5 s* Z: R& M
. W* O/ x& y0 W4 N( J2 q1 a' ?- }5 V8 F- _8 ]+ r( l
复制代码 Test.java:
, A" q3 y7 p# g% M2 j9 G. \; w, t- /**
, Q8 p! v) V. G) d* Y - * 一个动态代理的例子$ [0 N4 J7 \# n3 T
- * @author Administrator
* i3 H6 H- ~) X$ R- H+ u - *被代理类和代理类有共同的方法,代理类调用方法时,其是实质是调用了InvocationHandler中的invoke方法" R/ o: ^9 j" J8 i O! E
- */# b6 i4 v0 R3 S3 T. |
- public class Test {
" T# A K! \. k# ~. r" j) ^; X9 @
6 R5 | J0 O: k, G' m7 q- public static void main(String[] args) {* t+ J* m" H: V* K0 u
- // TODO Auto-generated method stub+ t0 f2 Z, u3 {7 u
- MyProxyed proxyed=new MyProxyed();
4 _9 M$ p: w5 W% u+ m' n - ProxyClass proxy=new ProxyClass();
* ^ l) m; J: V/ q - //这个是真正的代理类
1 o0 K" u9 L1 U6 @; N( s - Object obj=proxy.blind(proxyed);
1 O' A! g# F9 z V- p. h - Common common=(Common)obj;
: F1 W: T, {) L6 t4 o - common.action();
0 i& Q6 J0 k% j6 v" P - }
6 }- r) U# C) G) V; |/ p7 G5 x - ! x3 J/ B$ o4 `0 J' `! o0 L! D* O
- }
6 r8 _5 q# Y$ Q! s4 q! U
复制代码
' l% _# l" C7 G0 P
ProxyTest.zip
(5.52 KB, 下载次数: 5)
& w* y" x4 U+ ~$ X: F
' c$ ?- z" D/ @. i |
|