TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
Common.java:
5 D8 E" Q; K6 m
9 F1 f; Q7 l# @* E8 x- public interface Common {) K9 ]/ Z( F( s, k5 ?" U
2 A3 ~2 i c. R! P- public void action();
j3 ]# i( U0 _ - }
* ~' K( ?% P+ ]8 E
复制代码
0 P" K% \$ n: W8 pMyProxyed.java:
+ T& q! y9 ?5 O% H" j- /**
8 ]! P6 x) h9 E" V1 s5 d - * 被代理类
' N8 o7 C; _" g2 g- }- H - * @author Administrator/ \7 T- k" v8 O% F8 R) Y
- *
- N5 J" w$ |; ?: E, k: O - */7 Y7 r5 a+ l2 l1 r' c* G
- public class MyProxyed implements Common{1 w, g5 X$ x% F
6 q x, u+ \. P/ A9 [8 Z- public MyProxyed(){8 w# T$ v! U+ l$ y/ F( |1 \
- 1 T. P* }! t6 \% p7 ^6 @$ h
- }
1 ~# V! F% l4 k4 p - @Override9 D: k5 C' D( T' D
- public void action() {
; d F" V* z( N4 k - // TODO Auto-generated method stub
& J7 f2 {% a# v; k - System.out.println("我是被代理类,别忘了我。。。。");
( Y: o$ \6 g/ G- n5 k - }. x& x0 ^/ B& e- p. I4 O5 a+ M8 c
- + @' z6 u* |! w' W- N! `
- }8 E: c/ a A" S" y! M; Y
复制代码 ProxyClass.java:
# o6 K& ^7 \6 L! L' v- import java.lang.reflect.InvocationHandler;
; X* z4 v# y: k% w: N; M5 \ - import java.lang.reflect.Method;
; [0 }- Y/ ^5 n - import java.lang.reflect.Proxy;
; g" u; F7 b0 }( @1 M+ ]
# Z* Y4 \+ r8 p. M! t, y3 K- 8 {) W' G9 } `1 [ ^
- public class ProxyClass implements InvocationHandler {
+ @7 U0 {, Y4 [; W - Object obj;4 A' s" I8 \3 @8 p) t. t
- /**
5 W9 S* A, B/ ]/ n - * 用于生成代理类2 P9 Z9 r2 K3 T/ n5 k
- * @param obj 被代理类对象) o; a- q: E% }0 z7 C! o! h
- * @return 一个代理类' Q& r- y' t1 i0 Y) U
- */( `( v& W8 X5 @4 ?3 L
- public Object blind(Object obj){+ @ V+ Y+ C4 q5 v! }
- this.obj=obj;& J0 v l. C) _3 P3 u
- return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
3 a5 S- a/ J% I+ O+ ^7 u - }, ]6 W/ X y( |- D- V6 H
- /**
; E! q! E% A4 N: A; m7 I - * 代理类对象调用接口方法时,实质上是返回来调用了该方法
) I5 C1 u+ V+ S- X% { - */0 H$ W5 a6 b+ W# N3 e. z
- @Override* R% T3 F3 _4 } t7 S H
- public Object invoke(Object arg0, Method arg1, Object[] arg2)
6 B) |, p4 ]3 O. F* j/ S - throws Throwable {
2 B2 B4 ~& Q2 U+ H( M% D* E% U2 F - // TODO Auto-generated method stub
/ A" m: ?( g7 S8 k# r8 C - Object returnVal=arg1.invoke(obj, arg2);
9 i# R9 V% j5 T - System.out.println("我是代理类");
+ Q8 C; T; A' l; A! n# @ - return returnVal;
4 n k3 Y1 T5 ?0 T+ q - }: r& I) [* }* R5 t, V F
- 2 Q8 q4 E3 d; d
- }
7 D1 \; J0 I, f
复制代码 Test.java:+ w: z- k' @! @4 ~/ w
- /**$ i$ f! j1 K9 P7 A& j1 ?- M0 G1 C
- * 一个动态代理的例子
4 ~* r2 M4 f* u, F - * @author Administrator
8 Z6 A6 B2 w% N- V+ [3 D5 z - *被代理类和代理类有共同的方法,代理类调用方法时,其是实质是调用了InvocationHandler中的invoke方法
# `/ }1 s, v3 W7 ?, n7 D - */
. _. C$ X4 `' Q" J9 M - public class Test {" T: e% G2 z) Y
- : Z2 ?: l/ j0 U4 b" S
- public static void main(String[] args) {, M8 Y8 ], E7 q1 L
- // TODO Auto-generated method stub9 l& z% ?. s' {0 S! b- D8 P
- MyProxyed proxyed=new MyProxyed();7 L' p8 I. [- { ?
- ProxyClass proxy=new ProxyClass();$ p( |) j/ Y: B5 t$ s" P
- //这个是真正的代理类; ]1 g, {8 |! j& x" k
- Object obj=proxy.blind(proxyed);
" r1 t/ |: Q2 @( z - Common common=(Common)obj;% x! d# G' v* S4 l
- common.action();
! M% G8 c7 J- A \3 u5 ~ - }% a: `' Q/ Q! \1 p/ R% _
& G$ n" m& i0 `% T1 q# S- }
8 H. q3 P* m6 Q, o% L
复制代码
4 z) K9 G& C1 q9 ~
ProxyTest.zip
(5.52 KB, 下载次数: 5)
( D3 u4 _) Z, _8 y3 X) d
9 ~( ]. Q% c9 l* j0 A: {8 ]9 i |
|