静态代理与动态代理

 1 package com.example.demo02.proxy;
 2 
 3 import com.sun.org.apache.bcel.internal.generic.NEW;
 4 
 5 import java.lang.reflect.InvocationHandler;
 6 import java.lang.reflect.Method;
 7 import java.lang.reflect.Proxy;
 8 
 9 interface House {
10     void buyHouse();
11 }
12 
13 class Joee implements House {
14 
15     @Override
16     public void buyHouse() {
17         System.out.println("我是joee,我买房子啦!");
18     }
19 }
20 
21 //  静态代理,代理不同的对象要不同的代理类
22 class StaticProxy implements House {
23 
24     private Joee joee;
25 
26     public StaticProxy(Joee joee) {
27         this.joee = joee;
28     }
29 
30     @Override
31     public void buyHouse() {
32         System.out.println("开始代理joee买房子!");
33         joee.buyHouse();
34         System.out.println("结束代理joee买房子!");
35     }
36 }
37 
38 //  动态代理  不需要生成代理类
39 class JDKDynamicProxy implements InvocationHandler {
40 
41     //  被代理对象
42     private Object target;
43 
44     public JDKDynamicProxy(Object target) {
45         this.target = target;
46     }
47 
48     @Override
49     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
50         System.out.println("我是房产中介.....开始监听你买房啦!");
51         Object object = method.invoke(target, args);
52         System.out.println("我是房产中介.....结束监听你买房啦!");
53         return object;
54     }
55 }
56 
57 
58 public class MyProxy {
59     public static void main(String[] args) {
60         Joee joee = new Joee();
61         
62         // 静态代理
63         new StaticProxy(joee).buyHouse();
64         System.out.println("---------------------");
65 
66         // 动态代理
67         House proxyInstance = (House) Proxy.newProxyInstance(joee.getClass().getClassLoader(), joee.getClass().getInterfaces(), new JDKDynamicProxy(joee));
68         proxyInstance.buyHouse();
69 
70     }
71 }

 

posted on 2018-10-27 23:54  jovelove  阅读(106)  评论(0)    收藏  举报