TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
Common.java:
3 {& _3 j* Y& m0 w- O- 5 X9 w, W3 S1 D: @
- public interface Common {! N L$ i4 h, c9 m
6 n+ [; J$ G+ [ L5 L6 T7 Q- public void action();
- c' w+ h/ L; x: i! L - }
5 R8 b5 I# s$ r, F" J# s; Y8 @
复制代码
/ Y' I* t U& r) l9 B! B" pMyProxyed.java:# {6 f# I- m @( B+ z( \
- /**0 c, j% M" G8 W# o
- * 被代理类" ?6 _& c5 f8 t# T
- * @author Administrator0 k' J4 l" g. W7 ?4 h! H
- *
: p& L, ^! k4 R* K( S8 `& c' F7 H - */
1 O* d- v; d% d1 l8 g ]0 F0 ~ - public class MyProxyed implements Common{* I0 H/ e8 S- u1 f+ o
2 F; ~) u% ^7 Y# c* w- public MyProxyed(){! R9 z7 M1 r- U
-
, H7 \8 G9 i" z1 _5 c - }
9 A9 s6 Q6 a# t$ C/ R. r9 V - @Override
+ r5 ^2 a$ ]. X7 c - public void action() {
6 O8 c" I. F8 ~/ ] - // TODO Auto-generated method stub
% h* B( u. x* T; B - System.out.println("我是被代理类,别忘了我。。。。");+ e: q8 x8 q2 i" z$ s- X& m% D
- }' m! Q) t* j B
- ' S1 r- X$ _( v% Y% F: w6 k. X
- }
8 N8 W! }& v& V0 X* T, R* \
复制代码 ProxyClass.java:6 [' U5 M: d. V7 j O& s" V" a
- import java.lang.reflect.InvocationHandler;
) y- j6 d- u8 P, J( T - import java.lang.reflect.Method;
# c4 y, p, \8 J: U, F& N% I: Z - import java.lang.reflect.Proxy;
( P" ^) R% d' Q9 [# ~2 I
9 t$ x8 q! I2 V3 y8 u1 h- " W- r h* w: p' z
- public class ProxyClass implements InvocationHandler {
4 T v2 B8 @- \ c) r+ Y7 I - Object obj;
- q6 a3 x8 j: a# V3 c( N6 z - /**
- r# ?1 q3 W8 H* s# ?. ^% n6 Z3 O - * 用于生成代理类
4 _. n, q$ t1 f D/ b - * @param obj 被代理类对象9 A- i, k6 P* d. a/ ^* ]
- * @return 一个代理类( A( T& W5 | F0 M
- */2 m+ A& P4 }/ P5 z* Y5 v% g
- public Object blind(Object obj){
8 _# H ~* I! x/ J - this.obj=obj;. ~( p- b8 n: d, P+ a ~4 q2 _5 A
- return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
- |. r2 @- }. E* j4 ~5 k- o - }" q; S: E9 f5 Q1 M1 S
- /**
5 U7 }+ s/ Y8 o, ] - * 代理类对象调用接口方法时,实质上是返回来调用了该方法
6 b- P% o2 D7 A. L! ~! q# L, c - */
" T, V! x# c5 P - @Override
, i/ S3 i8 K* ] - public Object invoke(Object arg0, Method arg1, Object[] arg2)
+ n1 x; p3 L [ - throws Throwable { u, u3 X2 r2 f" R2 ?! S+ o) x4 C
- // TODO Auto-generated method stub
) O9 e9 w% l6 ~ - Object returnVal=arg1.invoke(obj, arg2);. D; w# v! ^! ~* t
- System.out.println("我是代理类");6 r4 u+ l4 |; m# b6 t
- return returnVal;: ]% f- X# d }4 b* A+ S
- }2 a5 W! A" V3 ~! v8 s
5 ~, j9 m7 \! z$ n/ U2 W- }; C* ^. e: Y/ a2 |: n. o2 `
复制代码 Test.java:" V8 H9 I4 s! o
- /**
* J$ }1 ~; Z" V - * 一个动态代理的例子8 l# O m. q& ~* I3 Z
- * @author Administrator8 U8 ^& x- D# c8 k& t
- *被代理类和代理类有共同的方法,代理类调用方法时,其是实质是调用了InvocationHandler中的invoke方法& z2 S" p, w# h3 s% X. u- d
- */
) Y, u& y3 x8 O$ i: t9 T - public class Test {2 K' U% l: Z! g S/ A* e& G' W
- 1 }- Q- t+ L) Q" s2 s$ Z0 Z1 f
- public static void main(String[] args) {( e8 Z. b/ o; t. r7 K: I
- // TODO Auto-generated method stub5 {3 c5 X# e3 v8 s$ g
- MyProxyed proxyed=new MyProxyed();5 H; {0 `4 X4 f7 [9 \5 c
- ProxyClass proxy=new ProxyClass();
/ e6 w- ]# r9 W: o! r - //这个是真正的代理类
$ B) }' U- `7 G+ m; [: F - Object obj=proxy.blind(proxyed);; u8 F' k$ i) X( e
- Common common=(Common)obj;
! _# `, y% M' {% a8 Z. m' s3 N* |7 K - common.action();) h" y3 `( W, R; ]: b& E
- }9 V$ G$ j/ z, i5 l* m
- 0 Q O! L1 c$ n* p7 n% w: v
- }
, Z) H2 ~- Z. Z n) y8 g8 k8 f
复制代码 % m1 ]1 x# Y1 M2 ?8 {
ProxyTest.zip
(5.52 KB, 下载次数: 5)
* \+ x0 i7 {6 v+ S: R; ]. c$ M! ?# p+ D9 Z/ z7 P
|
|