TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
Common.java:! n7 A4 ]' j! l- j n7 I
- ; s: u r! X$ W- m/ u! a0 h
- public interface Common {
g( m U' o. h u7 k. o
" C- A4 |" Q5 T8 p f& ]: p X; I. i- public void action();& s& V/ c8 d2 I" s1 J; B1 H
- }7 b7 y1 ] K9 u1 K/ `
复制代码
: z" i: K) ]: h* S+ c# b/ jMyProxyed.java:- U! ]" C# T+ t
- /**
% E# B# c, v# z1 S0 y0 h3 P - * 被代理类% d- @ j9 ?( I0 r l$ J* H
- * @author Administrator
! G( F% I' T1 l- o; Q& `: l; ? - *# F) T l/ ?# R# b+ @4 m3 {" Z: a
- */3 C/ o) W) ?, k) m
- public class MyProxyed implements Common{0 E1 O* K' O! j1 ]% {0 v" E
8 q# }- S! s# _" x4 n# m/ M- public MyProxyed(){
% T4 h: C* G7 c K* [ -
& {1 X3 x$ W# ]4 h1 n8 |4 G - }
+ O& X$ x o5 h/ I7 M9 A) l - @Override9 ?' A8 H# L0 C+ {& v& |3 J0 {6 U
- public void action() {
5 T, [2 q/ ]3 r$ G2 n0 o - // TODO Auto-generated method stub' I: ?5 K! I. P3 N; l
- System.out.println("我是被代理类,别忘了我。。。。");, L; P! h0 q+ j# [4 b4 J' w
- }; d2 A' z2 L5 ?
- b) t; B. i- O4 p2 O7 l$ d
- }
$ ~3 f D% W5 f
复制代码 ProxyClass.java:, e# a4 b/ o* x% x
- import java.lang.reflect.InvocationHandler;; o, B) c' [' {" C9 T, a0 j& X& m
- import java.lang.reflect.Method;
* b/ ]* l, E8 D0 p- e( F' M# y4 j - import java.lang.reflect.Proxy;
8 q; y8 W2 j7 Q6 `2 Y+ h; \) D - + j: Z6 b" z) n% Y6 p
% u1 v7 K! T9 C, H- public class ProxyClass implements InvocationHandler {
; A! T* ]* j9 k% Y2 A% ] - Object obj;
* j- T+ b9 i: o& L - /**
, _5 @: q! W+ T% V# i" B# Y - * 用于生成代理类
/ l# J5 k9 l4 n8 W* r8 I% s - * @param obj 被代理类对象3 O, l3 N' o3 ~* [7 n4 n$ Z0 b
- * @return 一个代理类
# U5 Y+ m7 }+ x4 \$ P3 M - */4 p; o0 {9 B3 Y6 V
- public Object blind(Object obj){
' \% r& v) T% r$ ]7 A5 K" q - this.obj=obj;
& e7 |9 b" v, o( g+ `; t - return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
7 d8 Z' a( g* B - }
8 a& S5 C' r) o5 ^ - /**+ [) L+ I; d9 E K
- * 代理类对象调用接口方法时,实质上是返回来调用了该方法; ~: j! o M7 b$ x; o, I+ J
- */8 j7 C, ^# B! h# m( `
- @Override' `2 J- p" E- o. I% b
- public Object invoke(Object arg0, Method arg1, Object[] arg2)
+ K' f8 b8 t6 W; X6 w6 v0 f - throws Throwable {
( h) ^# q4 K; ]/ V: v/ o) { - // TODO Auto-generated method stub
+ G% c% @6 Y% N# C - Object returnVal=arg1.invoke(obj, arg2);
% ]$ l% w2 _2 e0 V, w/ ~9 c. ^ - System.out.println("我是代理类");- \: Z) h4 z2 t9 |
- return returnVal;
7 i9 c! X" F9 c - }
* u) H4 {& o3 h: d% ^" c - " }9 _2 S, Y; G: g; }/ {& W
- }- w3 {8 G( _: h5 P' M7 T3 e+ x
复制代码 Test.java:
- [/ j# D# _$ @/ m9 o# k; h( K7 ~/ ^- /**
1 ]7 X" f% v( Q - * 一个动态代理的例子% T4 k6 _& M0 J/ i" z6 I& Z
- * @author Administrator
# I: w- I" d5 ` W - *被代理类和代理类有共同的方法,代理类调用方法时,其是实质是调用了InvocationHandler中的invoke方法
3 g3 T1 @! q% I- n, { - */- v6 @7 F! G. \) Z
- public class Test {
" P P. ?. p! ^. [. @: B5 z
$ I1 J) W( [ Q' ~- public static void main(String[] args) {0 U5 X4 U. a3 {* U
- // TODO Auto-generated method stub
5 `! l" Z6 o+ i/ n - MyProxyed proxyed=new MyProxyed();" A; N; a4 H' ?6 v$ s% _
- ProxyClass proxy=new ProxyClass();# T' M. d, F. y' {, x4 e" b& o
- //这个是真正的代理类2 K% w1 m+ S1 h3 p8 ~; t
- Object obj=proxy.blind(proxyed);
' h' s: s: b( a8 z* E# G" `; N - Common common=(Common)obj;# {% H& A7 O2 c
- common.action();. d( ~" d0 f: u( ^! M$ m
- }
% q( W: x# ?$ Q4 m/ }
0 K$ J, j6 q9 a- }
+ o+ ]" X8 i; n# p' g
复制代码 ' O8 A6 v6 {8 m" Y
ProxyTest.zip
(5.52 KB, 下载次数: 5)
5 W! T$ H# {* n9 }8 W' `% i7 m1 @
4 F W8 |1 X1 E7 x% k+ ^# q' G4 [ |
|