java

动态代理

rzk · 4月4日 · 2020年本文共1216个字 · 预计阅读5分钟143次已读
1 //假如经理车子很多,但懒,自己不想卖车,这件事可以 交给代理去做
2 //卖车接口
3 
4 public interface sellCar {
5     void sellcar();
6 }
1 //经理 去实现这个接口
2 public class Manage implements sellCar {
3     @Override
4     public void sellcar() {
5         System.out.println("卖车");
6     }
7 }
 1 //上面的事情做完,这时就需要代理来做了
 2 public class ProxyInvocationHandler implements InvocationHandler {
 3     //被代理的接口  
 4     private sellCar sellcar;
 5     public void setSellcar(sellCar sellcar) {
 6         this.sellcar = sellcar;
 7     }
 8     //生成得到代理类
 9     public Object getProxy(){
10         //newProxyInstance 官方解释:返回一个指定睿共享接口的代理类的实例方法调用分派到指定的调用处理程序
11         return Proxy.newPro睿共享xyInstance(
12                 this.getClass().getClassLoader(),
13                 //代理接口
14                 sellcar.getClass().getInterfaces(),
15                 this);
16     }
17     //处理代理实例,并返回结果
18     @Override
19    睿共享 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
20           //动态代理的本质,就是使用反射机制实现
21         Object result= method.invoke(sellcar, args);
22 
23         return result;
24   睿共享  }
25     public void seeCar(){
26         System.out.println("看车");
27     }
28 }
 1 -- 测试
 2 
 3 public class Client {
 4     public static void main(String[] args) {
 5       //真实角色 
 6        Manage manage = new Manage();
 7       //代理角色
 8         ProxyInvocationHandler pih = new ProxyInvocationHandler();
 9        // 我们的所有东西真实角色和代理角色,是不是都会睿共享实现一个公同接口
10        //我们现在是不是真实角色实现了这个接口没有问题对不对?
11       //嗯,代理角色是不是没实现?下面要写的内容就是通过这个代理角色的处理程序去实现
12         //代理真实角色
13         pih.setSellcar(manage);
14         //调用代理类的getProxy
15         sellCar proxy = (sellCar) pih.getProxy();//这里的proxy就是动态生成的
16         proxy.sellcar();
17     }
18 }

0 条回应