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 }