TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
Common.java:! I3 X8 X7 A- v% y+ v M
I9 m0 N7 S9 _: u+ x1 x/ d5 n/ z- public interface Common {
' Q- ]7 W" g! a1 \( b
! X- ?$ m, g# n! Q- public void action();
/ q w! p* |5 x1 h - }
% I* l7 A5 O: z) u
复制代码 " D' a3 U, Q7 w# h) N
MyProxyed.java:! Z) }6 f' r3 Z" R
- /**' p+ @# i9 A8 W n
- * 被代理类
' z( }- x9 ]8 m5 H - * @author Administrator/ o1 l* d* m- B7 I2 t1 Q
- *
4 r' p, B \1 S8 j4 M2 o/ Y - */
+ E% o; K" c) r; p - public class MyProxyed implements Common{
) D6 q4 P# _3 h* v- H: H- b& C7 e. Z - 0 p7 `7 X+ I! l
- public MyProxyed(){" e+ B( m( E3 A" b+ ^9 U
- 4 M# A- m% V6 ?" g' i, Z
- }- e: P( g0 ~1 P' d$ D& h. \) L1 U
- @Override9 J0 L# ?0 a, L+ A
- public void action() {
# |- z# n) h2 |2 J2 z6 _ - // TODO Auto-generated method stub" L$ l5 ]) n6 ~! L8 X- K: ?
- System.out.println("我是被代理类,别忘了我。。。。");* g+ z, u) S$ h1 O# H
- }2 P4 y5 S2 o( h0 v
- 9 V# o9 l+ n' Z9 J4 p5 [
- }' T+ O" F) t( n3 Z* J7 }3 z2 O
复制代码 ProxyClass.java:% }# k& M1 U ~% J4 s
- import java.lang.reflect.InvocationHandler;
6 `& E' v8 i3 g. f - import java.lang.reflect.Method;' S9 v5 w% q4 }% N6 C) T5 n
- import java.lang.reflect.Proxy;) w N. ]- w$ @3 v' O
- 4 M/ U# D8 Z) V+ G2 ~8 o- ]
- 0 t* s) h& K, M" h1 l+ T$ D
- public class ProxyClass implements InvocationHandler {3 a3 }. k `* |4 w
- Object obj;
/ u1 ^- {, x/ L6 S" p/ x - /**
\7 R0 ?8 `! S - * 用于生成代理类
6 a8 v* U0 `3 ~& d - * @param obj 被代理类对象2 N8 B# e' c+ r' j$ U5 z8 O
- * @return 一个代理类
+ h- U+ P- K. I; w6 \ - */
" |# Y/ e3 G! F2 i - public Object blind(Object obj){/ k' ?5 X$ ]% h) Q7 s
- this.obj=obj;0 c0 U* p3 t, s& x
- return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
1 F1 S) y" D! }! v1 { - }2 a+ x& g1 A- q4 d& }3 B3 m% G; o
- /**
/ S, h" R( G$ W" G- [6 F - * 代理类对象调用接口方法时,实质上是返回来调用了该方法
% B6 T0 T/ R# _4 I( }5 D$ ^ - *// p+ v) u) ^* S! f! m4 p
- @Override5 I' R6 i; T9 i/ F: R
- public Object invoke(Object arg0, Method arg1, Object[] arg2)" ]+ ~; }3 S! _4 P# I0 Y3 s5 R: t
- throws Throwable {; R, Q1 y- C! k- F: b: Q. U) {
- // TODO Auto-generated method stub! T; I6 q- b# c+ ?. \/ Y
- Object returnVal=arg1.invoke(obj, arg2);
* ~0 x$ E# O6 I0 k1 ?( {7 N - System.out.println("我是代理类");' D: m6 ~) R- u4 z! G! I7 r
- return returnVal;1 v1 u: o% A! ]% G4 J( L' {
- }
9 n m+ N* {$ B% M/ R - 4 o) V4 d: q; T
- }# ]( s, z4 c( C
复制代码 Test.java:
/ o, s% f# _, m- f- X- /**
/ v; s; M1 i! S - * 一个动态代理的例子
$ j+ d& T) b' `; O" A9 w - * @author Administrator, A9 \% s3 K5 p" s" l
- *被代理类和代理类有共同的方法,代理类调用方法时,其是实质是调用了InvocationHandler中的invoke方法! d3 G# S- }4 v( D
- */8 I6 Y* @* F8 c
- public class Test {
9 M. G" J# ^$ c# u - . X* L4 R3 e/ m. Z0 M: D
- public static void main(String[] args) {' n o: t/ Q0 e- r
- // TODO Auto-generated method stub. a- ~7 i( V& L+ A
- MyProxyed proxyed=new MyProxyed();' u9 t5 L$ u9 o4 a0 _, j# h Q
- ProxyClass proxy=new ProxyClass();8 f5 w; Y$ B( T5 X- ~( @
- //这个是真正的代理类
# y; P% q4 w0 P - Object obj=proxy.blind(proxyed);: e( m2 m. x+ W5 ?) J& H+ W
- Common common=(Common)obj;
! k2 _6 t% i7 t: @1 s - common.action();2 G' ~3 e/ v3 H" r5 u
- }( R/ M J i( j/ q* c0 h
# d: }2 K& T9 |- |0 W d* D- }8 r9 Z/ |$ ^: W' I4 q
复制代码
' r+ N Q0 o6 r
ProxyTest.zip
(5.52 KB, 下载次数: 5)
V% w5 j O' B, h- {& U: V0 O. W- y
|
|