zoukankan      html  css  js  c++  java
  • 动态代理详解

    动态代理详解

       动态代理它可以直接给某一个目标对象生成一个代理对象,而不需要代理类存在。
        动态代理与代理模式原理是一样的,只是它没有具体的代理类,直接通过反射生成了一个代理对象。
        动态代理生成技术:
            1. 基于jdk提供一个Proxy类,可以直接给实现某接口的实现类直接生成代理对象。
            2. 基于cglib (spring框架会学习)

        java.lang.reflect.Proxy;   该类可以直接生成一个代理对象。

        Proxy类的方法
            public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) 返回一个指定接口的代理类实例。
                仅能代理实现至少一个接口的类(即目标对象需要至少有一个接口)。
                ClassLoader:类加载器。固定写法,和被代理类使用相同的类加载器即可。
                Class[]:代理类要实现的接口。固定写法,和被代理类使用相同的接口即可。
                InvocationHandler:策略(方案)设计模式的应用。如何去具体实现代理,由我们自己决定。

        InvocationHandler接口中的invoke方法:调用代理类的任何方法,此方法都会执行。
            Object invoke(Object proxy, Method method, Object[] args)
                Object proxy:代理对象本身的引用。一般用不着。
                Method method:当前调用的方法。
                Object[] args:当前方法用到的参数。

        动态代理的应用
            在动态代理技术里,由于不管用户调用代理对象的什么方法,都是调用开发人员编写的处理器的invoke方法(这相当于invoke方法拦截到了被代理对象的方法调用)。
            并且,开发人员通过invoke方法的参数,还可以在拦截的同时,知道用户调用的是什么方法,因此利用这两个特性,就可以实现一些特殊需求,

            例如:拦截用户的访问请求,以检查用户是否有访问权限动态地为目的对象添加额外的功能

        静态/动态代理图解:

  • 相关阅读:
    万科郁亮:不赚最后一枚铜板,不盯竞争对手
    京东到底是家零售企业 还是家互联网公司?
    Google Shopping对卖家开放 或抗衡亚马逊
    网易大裁员,善变的丁磊开始焦虑了
    菜鸟物联网战略引领行业数字化升级
    入淘创业的新赛道:淘宝自运营覆盖50万商家
    腾讯的人工智能大战已然打响!
    冷链物流市场三个重要的发展趋势
    有人的地方就有江湖,来看看这三个男生和闲鱼的故事
    CSS布局-垂直居中问题
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/9144037.html
Copyright © 2011-2022 走看看