码迷,mamicode.com
首页 > 其他好文 > 详细

动态代理

时间:2020-05-29 12:12:33      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:mic   class   ima   this   优点   author   use   his   pre   

2、动态代理

JDK实现动态代理需要两个类:

  • 反射包下的Proxy : 用来返回要代理的实例
  • InvocationHandler : 执行代理的方法

技术图片

  • 代码

  • 动态代理:可以代理任何类

优点:我们不需要像静态代理一个类型的类必须跟一个代理,这里可以说是一个工具类,每一个类都可以拿来用,

底层利用反射的机制实现,而且静态代理必须和实例实现同一个接口,而有些方法代理并不需要实现,增加了代码冗余。

package bing.demo3;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author zhangbingbing
 * @version 1.0
 * @date 2020/5/23 19:01
 */
public class ProxyInvocationHandler implements InvocationHandler {
    private Object target;

    public void setTarget(Object target) {
        this.target = target;
    }

    public Object getProxy() {
        //关键:我们在这里返回被代理对象的实例
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                target.getClass().getInterfaces(), this);
    }

    //显然invoke就是用来执行方法的
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //用反射来实现
        Object invoke = method.invoke(target, args);
        return invoke;
    }
}
  • 测试
public class Client {

    public static void main(String[] args) {
        //都需要一个代理的实例对象
        Host host = new Host("小张");
        ProxyInvocationHandler phl = new ProxyInvocationHandler();
        phl.setTarget(host);//设置这个实例对象
        Rent proxy = (Rent) phl.getProxy();	//返回代理类
        proxy.rentHouse();		//执行代理方法
    }
}

动态代理

标签:mic   class   ima   this   优点   author   use   his   pre   

原文地址:https://www.cnblogs.com/bingstudy/p/12986558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!