• 动态代理模式


        动态代理模式还是第一次听说,之前虽然学习了代理模式,但是并没有使用过。那么自然就不知道这个模式会有什么优缺点,我们只是看到书上说怎样怎样。那么今天使用到代理模式时就发现,如果我们只是按照书上的标准去照搬代理模式,会有很多的冗余,也不符合面向对象的思想了。

     

        当我们需要给某个类的方法添加同一个功能的时候,如果我们只是简单的使用代理,就会重复的更改所有的方法。而如果我们的业务突然又不需要了,就又是一系列的修改。可见,简单的代理已经不能满足我们的需要了。于是,便用到了动态代理模式。

     

        使用动态代理模式,我们用到InvocationHandler接口的invoke方法和Proxy类。

     

        其中Proxy类主要用来获取动态代理对象。

            proxy类的newProxyInstance方法返回代理类的一个实例,返回后的代理类可以当作被代理类使用。

            它有三个参数:

                ClassLoaderloader   ----指定被代理对象的类加载器

                Class[]Interfaces   ----指定被代理对象所有的接口

                InvocationHandler   ----指定需要调用的InvocationHandler对象

            InvocationHandler对象中加入了代理类代理的接口类(第二个参数指定)的实现类,表现在invoke方法中。所以,调用要实现的接口的方法,都会调用InvocationHandler对象的invoke()方法。而invoke()方法就是Proxy这个动态代理类所代理的接口类的抽象方法的真实实现。

        这样就相当于调用了我们需要调用的方法,同时我们可以对调用做控制。


        一句话总结动态代理:

            newProxyInstance方法的三个参数指定被代理对象的类加载器、接口和对接口的实现,返回被代理的的类实例,调用该实例的方法时其实就是调用包含了该方法的实现的invoke方法。

  • 相关阅读:
    监控代码运行时长 -- StopWatch用法例程
    验证码处理算法(一)
    Linux下安装JDK及相关配置
    JAVA爬虫---验证码识别技术(一)
    JAVA4大线程池
    海量数据去重(上亿数据去重)
    python协程与异步协程
    解决WinSCP连接虚拟机
    生产消费者模式与python+redis实例运用(中级篇)
    生产消费者模式与python+redis实例运用(基础篇)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3341645.html
Copyright © 2020-2023  润新知