首页 > 其他 > 详细

代理模式--动态代理

时间:2020-07-21 21:27:22      阅读:69      评论:0      收藏:0      [点我收藏+]

1. 动态代理

  1. 动态代理和静态代理一样
  2. 动态代理的代理类是动态生成的,不是我们直接写好的
  3. 动态代理分为两大类:

      基与接口的动态代理----JDK动态代理

      基于类的动态代理---cglib动态代理

      java字节码实现:javassist

动态代理需要了解两个类:Proxy代理类,InvocationHandler调用处理程序

2. 动态代理的demo实现

1.接口

1 public interface Rent {
2     public void rent();
3 }

 

2.真实角色(真实角色实现接口)

public class Host implements Rent {
    @Override
    public void rent() {
        System.out.println("房东要租房子");
    }
}

 

3.代理对象,动态生成代理类

  自动生成代理类时,需要封装被代理的接口,实现set方法

  生成代理类:固定的步骤,需要修改的只有被代理的接口rent

  处理代理实例:固定的步骤,动态代理的本质就是使用反射机制实现

 1 //使用这个类自动生成代理类
 2 public class ProxyInvocationHandler implements InvocationHandler {
 3     //被代理的接口
 4     private Rent rent;
 5     public void setRent(Rent rent){
 6         this.rent=rent;
 7     }
 8     //生成得到的代理类
 9     public Object getProxy(){
10         return Proxy.newProxyInstance(this.getClass().getClassLoader(),rent.getClass().getInterfaces(),this);
11 
12     }
13     //处理代理实例,返回结果
14     @Override
15     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
16         //动态代理的本质就是使用反射机制实现
17         Object result = method.invoke(rent,args);
18         return result;
19     }
20 }

 

4.客户端访问代理角色

  代理角色需要动态生成,通过调用程序处理角色来处理我们要调用的接口对象

 1 public class Client {
 2     public static void main(String[] args) {
 3         //真实角色
 4         Host host=new Host();
 5         //代理角色,目前没有,需要动态生成
 6         ProxyInvocationHandler pih = new ProxyInvocationHandler();
 7         //通过调用程序处理角色来处理我们要调用的接口对象
 8         pih.setRent(host);
 9         //这里的proxy是动态生成的
10         Rent proxy=(Rent)pih.getProxy();
11         proxy.rent();
12     }
13 }

 

                      

代理模式--动态代理

原文:https://www.cnblogs.com/lxzlovewyq/p/13356133.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!