TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
Common.java:! V- ^; N! v) L* V2 O
- 8 \; q+ g" M9 \/ A4 S4 X
- public interface Common {
$ r5 g" S2 ^( F" |
: u, A0 M" B- O0 x4 r2 A/ O- public void action();
) m1 R# G# O2 i( Y" \& J' r - }
* M0 s+ y! U% q
复制代码
: p( \: v$ {5 d, Z2 Z4 @MyProxyed.java:: _- p. R- g# b1 n+ y/ r
- /**
# z& R y( |) g% ^) Z# I - * 被代理类0 E& N: Z9 |+ r8 i6 B9 H5 a
- * @author Administrator2 V4 G8 o$ F7 T# H7 z% j
- *
8 e: C0 h/ ~4 e - */) O! `- A" ` V0 L% L( E4 q
- public class MyProxyed implements Common{3 b3 @9 I2 ^0 k1 X3 b9 `3 I
- 9 I9 c. q- ?4 S6 w' p
- public MyProxyed(){( d! T2 V( }* }- u) e/ U
- # d, F: O4 _& m# e7 V
- }+ ]4 q0 ]' _) ^ I i" n
- @Override
5 R( w. p/ z( i* {8 G" \6 G& C - public void action() {
, ~) k$ A' o7 S$ O5 I/ w' f - // TODO Auto-generated method stub
7 G: r* U3 }* w- Y) J: f- A - System.out.println("我是被代理类,别忘了我。。。。");
+ d% D( Z) K2 x" y- g1 a( B f - }5 e) K$ X2 v% P) z( v+ u* D
2 n9 l2 `2 J; q' c" V9 Y. A( l- }- @$ v- i( P6 E, V
复制代码 ProxyClass.java:
9 h8 @" K9 I" o, {. m. T' o- import java.lang.reflect.InvocationHandler;
. t, c, {+ [1 F- b( N' d, _ - import java.lang.reflect.Method;; E" b0 g( j9 d$ u2 W0 Z
- import java.lang.reflect.Proxy;0 e# z0 ^* w1 V$ R s
- , ?- ?8 i* j* |. i2 _5 ?
- 5 y' j9 v# E5 D/ p3 w. p# E) z8 U7 o
- public class ProxyClass implements InvocationHandler {
! b; I" y! } ?1 O# ]1 ?5 h ~ - Object obj;
+ p! I! l7 U3 ]! z; Y% k l - /**
% v! _) b, v. R5 \' z- S - * 用于生成代理类
. t( q, \5 g$ L/ x0 i - * @param obj 被代理类对象
5 M: D/ E% Q" C - * @return 一个代理类
6 c. U: ^6 X- K3 i - */! t* E+ ?5 |( j3 e
- public Object blind(Object obj){
7 y4 ]1 A' S, A) ~+ H) j - this.obj=obj;
+ O! R' Z! W; {6 w# S8 s8 @3 @. y - return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
8 y1 M! E: O. \0 k n - }! o8 a! i0 A c) D, K8 o& S
- /**
( e$ I, l2 C8 t& R* t, _$ K/ f - * 代理类对象调用接口方法时,实质上是返回来调用了该方法7 H. W+ U/ R7 d( R- d J
- */
, y U4 Z4 I1 y, j! _4 O+ @ - @Override) P, a8 q/ y# w' `- n) |) D
- public Object invoke(Object arg0, Method arg1, Object[] arg2)2 f* j/ V/ N1 U( K3 C- j4 v
- throws Throwable {
* g3 j8 }8 s9 F0 e4 ~/ r3 b - // TODO Auto-generated method stub$ P9 S' m% t4 w/ y
- Object returnVal=arg1.invoke(obj, arg2);
~7 B# n5 i) W9 _ - System.out.println("我是代理类");
( U" ~/ c( D3 I$ f+ I l - return returnVal;
1 y2 G' @# R( k - }7 G( M* u1 w; g5 y4 z, F% {
$ c y2 F; v0 K" o8 ~. F- }
8 y5 F- v/ u/ X. I6 ?7 Z: m
复制代码 Test.java:
8 z+ g9 j- D( p- z/ E+ k- /**
# W' A3 `* X- r$ D% a! n" K; K - * 一个动态代理的例子
4 y L* X" B2 w3 g2 Y9 ]& q - * @author Administrator, c0 N, F4 A# x2 W- W; n d- J
- *被代理类和代理类有共同的方法,代理类调用方法时,其是实质是调用了InvocationHandler中的invoke方法) l8 o0 b4 _+ _' {9 D) j' d
- */; t$ j4 d! f* i9 p
- public class Test {
7 c4 Z1 O# L- Q3 J$ ] - + d+ M- F9 o" D( T, J: J
- public static void main(String[] args) {/ W' f6 J: ~/ Q' J
- // TODO Auto-generated method stub
i" B3 Z! s# i {; l - MyProxyed proxyed=new MyProxyed();+ a& R1 c8 j" }7 E3 v6 w' F) r- H. e, m
- ProxyClass proxy=new ProxyClass();; c$ E# B1 C3 ?- n
- //这个是真正的代理类
. G8 J1 ]$ ?3 F" Q6 B$ n - Object obj=proxy.blind(proxyed);
2 ~% K. s! v- I3 i' E/ d! o - Common common=(Common)obj;- c% Q+ d* u) r6 d0 B+ Y
- common.action();2 K' o. \( q. w4 N
- }" O$ I+ v5 X: n) L; S x1 T
! C: D' E( v) z) }- }
+ Y/ _9 O2 w2 M- t( A' B& U
复制代码
, q+ `0 @+ w' y* O+ h$ H3 c7 x/ g
ProxyTest.zip
(5.52 KB, 下载次数: 5)
' |) b) d) i& s e! _" i* v# B: V9 b8 c
|
|