tomcat源码分析3—>代理模式深入分析

来源:互联网 发布:管理自己的淘宝店铺 编辑:程序博客网 时间:2024/05/22 12:35

java动态代理:

hello接口

public interface Hello {    void sayHello();}

HelloImp实现

public class HelloImp implements Hello {    public void sayHello() {        System.out.println("你好,世界!");    }}
public class MDynamicProxy implements InvocationHandler {    private Object target;    public MDynamicProxy(Object target){        this.target = target;    }    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        beforeInvoke();        Object result = method.invoke(target, args);        afterInvoke();        return result;    }    private void beforeInvoke(){        System.out.println("方法执行之前");    }    private void afterInvoke(){        System.out.println("方法执行之后");    }}
@Test    public void test1(){        // 需求代理的类        Hello hello = new HelloImp();        // 方法拦截器        MDynamicProxy dynamicProxy = new MDynamicProxy(hello);        /**         * 包含了方法拦截器的代理         * 该代理类的所有的可执行的方法都会被dynamicProxy拦截         * 所以dynamicProxy《拦截了所有的方法》之后,再根据《方法名》         * 去找到被代理类的相应的方法名,并执行响应的方法         */        Hello helloProxy = (Hello) Proxy.newProxyInstance(                hello.getClass().getClassLoader(),                hello.getClass().getInterfaces(),                dynamicProxy                );        System.out.print("代理之前:");        hello.sayHello();        System.out.print("代理之后:");        helloProxy.sayHello();  }

通过查看Proxy源码可以知道,proxy通过newProxyInstance生成代理类:1、该类包含了接口所有的方法;2、该类所有的方法调用会被分发到dynamicProxy类上(Method是被调用的方法信息的封装);3、method.invoke(target, args)会在被代理类上寻找是否有该方法的信息,如果有那么就调用。

上述是动态代理的核心要点

总结:Method、Class这些是描述对象的对象,是属于“元”素据,代理通过对对象的元数据在运行时进行查找分析等实现了Java的反射机制和动态代理(PS:元数据是描述对象的数据,所以可以通过元数据生成相应的对象)

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 佳吉物流电话查询 佳吉快运价格 佳吉物流查询单号查询 佳吉物流电话号码多少 佳吉网点查询 佳吉物流网点查询电话 佳吉快运网点 佳吉快运电话 佳吉快运怎么样 佳吉物流单号查询快运 佳吉物流查询 佳吉物流怎么样 佳吉快运的收费价格表 佳吉快运网点查询 上海佳吉快运有限公司 佳吉物流电话号码 佳吉物流公司 佳吉快运收费标准 吉佳物流 嘉吉物流 一品佳味熟食培训 北京一品佳味怎么样 佳域g2屏 佳域手机g2s 佳域手机 佳域s3 佳域 佳域g5 佳域多少钱 佳域s1价格 佳域g4 佳域g2 佳域4g手机 佳域 s2 佳域s2手机 佳域s4 佳域宇通 佳域g2f 佳域gf2 佳域手机g2f 佳域g2l